Браузер: Идентификатор X уже объявлен

Я использую ES6 с Babel в моем проекте, и я получаю сообщение об ошибке, когда объявляю один из моих const

'use strict';

const APP = window.APP = window.APP || {};
const _ = window._;

APP.personalCard = (function () {

   ...

}());

ошибка

Uncaught TypeError: идентификатор "APP" уже объявлен

и это весь файл, у меня нет этого объявления в другом файле. Но я заявил, что var в верхней части других файлов.

Как вы думаете, что это должно быть?

Ответ 1

Но я заявил, что var в верхней части других файлов.

Это проблема. В конце концов, это делает несколько деклараций для одного и того же имени в одной и той же (глобальной) области - что вызовет ошибку с помощью const.

Вместо этого используйте var, используйте только одно объявление в своем основном файле или только назначайте window.APP исключительно.
Или сразу же используйте модули ES6, и пусть ваш модуль-загрузчик/загрузчик свяжется с ними, как ожидалось.

Ответ 2

Помните, что window - это глобальное пространство имен. Эти две строки пытаются объявить одну и ту же переменную:

window.APP = { ... }
const APP = window.APP

Второе определение не разрешено в режиме strict (включено с 'use strict' в верхней части файла).

Чтобы устранить проблему, просто удалите объявление const APP =. Переменная по-прежнему будет доступна, так как она принадлежит глобальному пространству имен.