Любой способ принудительно установить строгий режим в узле?


143

Я нигде не смог найти этот ответ, но я нашел несколько списков рассылки, где это обсуждалось, однако они довольно старые, и я понятия не имею, реализовано это или нет.

Есть ли способ принудительно использовать строгий режим в node.js?

Запись "use strict";во всех моих файлах .js ... ну, я предпочитаю использовать строгий режим, а не добавлять дополнительный шаблон.


Ответы:


214

По словам Ллойда, теперь вы можете разместить

"use strict";

в верхней части вашего файла в узле> = 0.10.7 , но если вы хотите, чтобы все ваше приложение выполнялось в строгом режиме ( включая внешние модули ), вы можете сделать это

узел --use_strict


eek: fs.js: 1497 function emit () {^^^^^^^^ SyntaxError: В коде строгого режима функции могут быть объявлены только на верхнем уровне или непосредственно внутри другой функции.
— j03m

1
ой О_о, значит, вы не можете использовать файловую систему, если вы используете строгий режим? какую версию узла вы используете, я не понимаю это на v0.8.12
— Chad Scira

1
'v0.8.16' <--- хм нечетно. Позвольте мне проверить.
— j03m

13
В узле v0.9.x и новее --use_strictфлаг работает должным образом .
— TooTallNate 05

22
Обратите внимание, что --use_strictбудет установлен строгий режим для всего приложения, включая все внешние модули, которые находятся вне вашего контроля.
— Льюис

60

В узле 0.10.7 вы можете установить строгий режим на уровне файла, разместив его "use strict";в верхней части файла. В заключение!


26

Вы также можете использовать

https://npmjs.org/package/use-strict

то есть напиши один раз

require('use-strict')

или даже сделайте шаг вперед и воспользуйтесь

https://npmjs.org/package/node-strict

Обратите внимание, что use-strictпри вызове каждого модуля, необходимого для каждого модуля , будет включен strict more.

Если вы предпочитаете неинвазивный подход, я написал другой модуль

https://www.npmjs.org/package/strict-mode

который включает строгий режим только в вашем пакете. Я думаю, что это скорее решение «делай то, что я имею в виду».


23

Просто используйте "use strict";вверху соответствующих файлов. Я знаю, что заманчиво попытаться вырезать шаблон, но это просто невозможно сделать в Javascript. Флаг узла, который не должен называться [1]

  • недокументирован и не поддерживается самим Node.
  • столкнулся с предложениями удалить его.
  • зависит от узла и не поддерживается ни в одном другом движке JavaScript.
  • нестандартный.
  • это не то же самое, что "use strict";потому, что это глобальный компилятор, и, как и все глобальные объекты, вы потенциально отрицательно влияете на чужой код.
  • все подвержено ошибкам. строгий режим и небрежный режим могут быть предметом различных ошибок. то есть, некоторые ошибки строгого режима уникальны для строгого режима

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

Сноски

  1. Флаг узла - --use_strict. Не используйте это .

1
Можете ли вы сказать мне, где вы обнаружили, что он «не поддерживается узлом»? Это просто вывод из того факта, что это не задокументировано?
— PUSHKIN

Главным образом. И поскольку это вообще не Node, это переход на v8.
— Эван Кэрролл

Спасибо! Мне было интересно, почему я не могу найти его в документации по Node .
— Гален Лонг

19

Вы также можете указать строгий флаг в директиве интерпретатора shebang.

#!/usr/bin/env node --use_strict

Но в настоящее время (по крайней мере, до v0.9.x) он страдает теми же проблемами, которые описаны в комментариях в @chad-scira ответ обсуждения.


1
envне позволяет передавать такие параметры, не так ли?
— Letharion

У меня работает на OSX 10.9.4.
— Джон Леманн

1
да - по-прежнему является примером ужасного принудительного соглашения, заключающегося в том, что две конкурирующие строки кода должны находиться в верхней части файла.
— aaaaaa

7
Осторожно, envбудет работать с такими дополнительными параметрами в OSX, но не в Linux.
— AerandiR
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.