Будь-який спосіб примусити суворий режим у вузлі?


141

Я не міг знайти цю відповідь ніде, але я знайшов кілька списків розсилки, де це обговорювалося, однак вони досить старі, але я не маю уявлення, реалізується це чи ні.

Чи все-таки варто застосовувати суворий режим у node.js?

Запис "use strict";у всі мої .js файли ... ну, я вважаю за краще, щоб він був змушений використовувати суворий режим, а не додавати додаткову коробку.

Відповіді:


211

За словами Ллойда, тепер можна розмістити

"use strict";

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

вузол --використовувати


eek: fs.js: 1497 функція emit () {^^^^^^^^ SyntaxError: У строгому режимі коду функції можна оголошувати лише на верхньому рівні або відразу в межах іншої функції.
— j03m

1
о О_о, значить, ти не можеш використовувати файлову систему, якщо ти змушуєш суворий? яку версію вузла ви використовуєте, я не отримую це на v0.8.12
— Чад Scira

1
'v0.8.16' <--- hmm непарне. Дозвольте мені йти перевірити.
— j03m

13
У вузлі v0.9.x і новіших --use_strictпрапор працює як очікувалося.
— TooTallNate

21
Зауважте, що --use_strictбуде встановлено суворий режим для всієї програми, включіть усі зовнішні модулі, які не знаходяться під вашим контролем.
— Льюїс

59

У вузлі 0.10.7 ви можете застосувати суворий режим на рівні файлів, розмістивши "use strict";вгорі файлу. Нарешті!


25

Ви також можете використовувати

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

тобто пишіть один раз

require('use-strict')

або навіть зробити крок вперед і використовувати

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

Зверніть увагу, що use-strictввімкнеться суворіше для кожного модуля, необхідного після виклику.

Якщо ви віддаєте перевагу малоінвазивному підходу, я написав ще один модуль

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

що дозволяє суворий режим лише у вашому пакеті. Я думаю, що це скоріше рішення "Роби, що я маю на увазі".


20

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

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

Деякі інші програмісти можуть подумати, що це подібне -wALLчи подібне, це не так. Це стандартизована функціональність, яку ви вмикаєте спеціально (порушуючи стандарт) та змінюючи семантику компілятора кожного.

Виноски

  1. Прапор вузла є --use_strict. Не використовуйте його .

1
Чи можете ви сказати мені, де ви виявили, що це "не підтримується Node?" Це просто випливає з того, що це не документально?
— PUSHKIN

Переважно. А тому, що це зовсім не річ Node, це пропуск до v8.
— Еван Керролл

Дякую! Мені було цікаво, чому я не можу знайти його в документах Node cli .
— Гален Лонг

18

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

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

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


1
envне дозволяє передавати такі параметри, чи не так?
— Летаріон

Працює для мене на OSX 10.9.4.
— Джон Леманн

1
так - все ще є прикладом жахливої ​​конвенції, що є двома конкуруючими рядками коду, які повинні бути у верхній частині файлу.
— aaaaaa

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