SyntaxError: использование const в строгом режиме
Я работаю с node.js, и в одном из моих файлов JS я использую const
в "strict mode"
, При попытке запустить я получаю сообщение об ошибке:
SyntaxError: Use of const in strict mode.
Какова лучшая практика, чтобы сделать это?
Редактировать:
'use strict'
const MAX_IMAGE_SIZE = 1024*1024; // 1 MB
11 ответов
const
а также let
являются частью ECMAScript 2015 (он же ES6 и Harmony) и не были включены по умолчанию в Node.js 0.10 или 0.12. Начиная с Node.js 4.x, "все функции доставки [ES2015], которые V8 считает стабильными, по умолчанию включены в Node.js и НЕ требуют какого-либо флага времени выполнения". Документация по Node.js содержит обзор того, какие функции ES2015 включены по умолчанию и кому требуется флаг времени выполнения. Поэтому при обновлении до Node.js 4.x или новее ошибка должна исчезнуть.
Чтобы включить некоторые функции ECMAScript 2015 (включая const
а также let
) в Node.js 0,10 и 0,12; запустите программу вашего узла с флагом гармонии, в противном случае вы получите синтаксическую ошибку. Например:
node --harmony app.js
Все зависит от того, с какой стороны находится ваш строгий JS. Я бы порекомендовал использовать строгий режим с const
объявления на стороне вашего сервера и запустить сервер с флагом гармонии. Для клиентской стороны вы должны использовать Babel или аналогичный инструмент для преобразования ES2015 в ES5, поскольку не все клиентские браузеры поддерживают const
деклараций.
Если это происходит в nodejs, это происходит из-за более старой версии nodejs. Обновите узел с помощью,
1) Очистить кэш NPM:
sudo npm cache clean -f
2) Установите маленький помощник под названием 'n'
sudo npm install -g n
3) Установите последнюю стабильную версию NodeJS
sudo n stable
Обновите инструкции для nodejs, взятые с /questions/18545315/kak-mne-obnovit-nodejs/18545368#18545368
Обычно эта ошибка возникает, когда версия узла, для которого выполняется код, старше, чем ожидалось. (т.е. 0,12 или старше).
если вы используете nvm, убедитесь, что у вас правильная версия используемого узла. Вы можете проверить совместимость на node.green для const в строгом режиме.
Я нашел похожую проблему в другом посте и опубликовал свой ответ там подробно
Один важный шаг после обновления вашего узла - связать двоичный файл вашего узла с последней установленной версией узла.
sudo ln -sf /usr/local/n/versions/node/6.0.0/bin/node /usr/bin/node
Это, вероятно, не решение для всех, но это было для меня.
Если вы используете NVM, возможно, вы не включили правильную версию узла для кода, который вы запускаете. После перезагрузки версия вашего узла по умолчанию изменится на системную по умолчанию.
Работал с этим при работе с Reaction-native, который работал нормально. Просто используйте nvm, чтобы использовать правильную версию узла для решения этой проблемы.
С момента, когда вопрос был задан, проект const
ключевое слово уже является стандартом жизни в рамках ECMAScript 2015. Также текущая версия Node.js поддерживает объявления const без --harmony
флаг.
С учетом вышесказанного вы можете запустить node app.js
, с app.js
:
'use strict';
const MB = 1024 * 1024;
...
получить как синтаксический сахар, так и преимущества строгого режима.
У меня недавно была похожая проблема, и я попал в вопросы и ответы. Это не решение, которое ищет ОП, но может помочь другим с подобной проблемой.
Я использую PM2 для запуска проекта, и на данном промежуточном сервере у меня была действительно старая версия Node, NPM и PM2. Я обновил все, но сохранил ту же ошибку:
SyntaxError: использование const в строгом режиме.
Я пытался остановить и запустить приложение несколько раз. Также попытался обновить все снова. Ничего не получалось. Пока я не заметил предупреждение, когда я побежал pm2 start
:
>>>> В памяти PM2 устарела, делайте
>>>> $ pm2 update
В памяти версия PM2: 0.15.10
Локальная версия PM2: 3.2.9
Попался! После запуска pm2 update
Я наконец смог запустить приложение, как ожидалось. Больше нет ошибок "const in strict mode".
Я использовал pm2 для запуска и поддержки процессов узла.
Из CLI он работал отлично.
which node
/usr/local/bin/node
node -v
v10.15.0
Однако я настроил cronjob и получил синтаксическую ошибку.
Затем написал cronjob для проверки
which node
а также
node -v
и, что удивительно, это был другой путь и другой вариант.
which node
/usr/bin/node
node -v
v0.10.48
Чтобы исправить cronjob, мне пришлось использовать флаг
--interpreter
для pm2, вот так:
pm2 start dist/server.js --interpreter=/usr/local/bin/node
Использование const
В строгом режиме доступен выпуск Chrome 41. В настоящее время Chrome 41 Beta уже выпущен и поддерживает его.
const не поддерживается ECMAScript. Поэтому после указания строгого режима вы получите синтаксическую ошибку. Вам нужно использовать var вместо const, если вы хотите, чтобы ваш код был совместим со всеми браузерами. Я знаю, не идеальное решение, но это то, что есть. Существуют способы создания свойств только для чтения в JavaScript (см. Можно ли реализовать свойства только для чтения в Pure JavaScript?), Но я думаю, что это может быть излишним в зависимости от вашего сценария.
Ниже приведено примечание о совместимости браузера с MDN:
Совместимость браузера
Текущая реализация const является специфичным для Mozilla расширением и не является частью ECMAScript 5. Она поддерживается в Firefox & Chrome (V8). Начиная с Safari 5.1.7 и Opera 12.00, если вы определяете переменную с помощью const в этих браузерах, вы все равно можете изменить ее значение позже. Он не поддерживается в Internet Explorer 6-10, но включен в Internet Explorer 11. Ключевое слово const в настоящее время объявляет константу в области действия функции (подобно переменным, объявленным с помощью var).
Firefox, по крайней мере, начиная с версии 13, выдает ошибку TypeError, если вы переопределите константу. Ни один из основных браузеров не выдает никаких уведомлений или ошибок, если вы назначаете другое значение константе. Возвращаемым значением такой операции является возвращаемое новое значение, но переназначение не удается только в Firefox и Chrome (по крайней мере, начиная с версии 20).
const будет определяться в ECMAScript 6, но с другой семантикой. Подобно переменным, объявленным с помощью оператора let, константы, объявленные с помощью const, будут иметь область видимости.