Jakikolwiek sposób na wymuszenie trybu ścisłego w węźle?


141

Nie mogłem nigdzie znaleźć tej odpowiedzi, ale znalazłem kilka list dyskusyjnych, na których było to omawiane, są one jednak dość stare i nie mam pojęcia, czy jest to zaimplementowane, czy nie.

Czy istnieje wymuszenie używania trybu ścisłego w node.js?

Pisanie "use strict";we wszystkich moich plikach .js ... cóż, wolę być zmuszony do używania trybu ścisłego, zamiast dodawać dodatkowe standardowe pliki.

Odpowiedzi:


211

Według Lloyda możesz teraz umieścić

"use strict";

u góry pliku w węźle> = 0.10.7 , ale jeśli chcesz, aby cała aplikacja działała w trybie ścisłym ( łącznie z modułami zewnętrznymi ), możesz to zrobić

węzeł --use_strict


eek: fs.js: 1497 function emit () {^^^^^^^^ Błąd składni: W kodzie trybu ścisłego funkcje mogą być deklarowane tylko na najwyższym poziomie lub bezpośrednio w innej funkcji.
— j03m

1
oh O_o, więc nie możesz używać systemu plików, jeśli wymusisz ścisłe? której wersji węzła używasz, nie rozumiem tego w wersji 0.8.12
— Chad Scira

1
„v0.8.16” <--- hmm dziwne. Pozwól mi zweryfikować.
— j03m

13
W węźle v0.9.x i nowszych --use_strictflaga działa zgodnie z oczekiwaniami.
— TooTallNate

21
Zauważ, że --use_strictustawia tryb ścisły dla całej aplikacji, włączając wszystkie zewnętrzne moduły, które są poza twoją kontrolą.
— Lewis

59

W węźle 0.10.7 możesz wymusić tryb ścisły na poziomie pliku, umieszczając go "use strict";na górze pliku. Wreszcie!


25

Możesz także użyć

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

to znaczy napisz raz

require('use-strict')

lub nawet zrób krok do przodu i użyj

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

Należy pamiętać, że use-strictpo wywołaniu zostanie włączone bardziej rygorystyczne dla każdego modułu wymaganego.

Jeśli wolisz podejście nieinwazyjne, napisałem kolejny moduł

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

który włącza tryb ścisły tylko w twoim pakiecie. Myślę, że jest to bardziej rozwiązanie typu „rób to, co mam na myśli”.


20

Po prostu użyj "use strict";na górze odpowiednich plików. Wiem, że kuszące jest wycinanie schematu, ale po prostu nie można tego zrobić w JavaScript. Flaga węzła, której nie należy nazywać [1]

  • jest nieudokumentowany i nie jest obsługiwany przez sam Node.
  • napotkał propozycje usunięcia go.
  • jest specyficzny dla węzła i nie jest obsługiwany w żadnym innym silniku JavaScript.
  • jest niestandardowy.
  • to nie to samo, co "use strict";fakt, że jest to kompilator globalny i podobnie jak wszystkie globalne potencjalnie niekorzystnie wpływasz na kod innej osoby.
  • wszystko jest podatne na błędy. Tryb ścisły i tryb niechlujstwa mogą powodować różne błędy. to znaczy, niektóre błędy trybu ścisłego są unikalne dla trybu ścisłego

Niektórzy inni programiści mogą pomyśleć, że jest to podobne -wALLlub podobne, nie jest. Jest to ustandaryzowana funkcjonalność, którą włączasz ad hoc (łamiąc standard) i zmieniając semantykę każdego kompilatora.

Przypisy

  1. Flaga węzła to --use_strict. Nie używaj tego .

1
Czy możesz mi powiedzieć, gdzie znalazłeś, że jest „nieobsługiwany przez Node”? Czy wynika to tylko z faktu, że nie jest to udokumentowane?
— puszkin

Przeważnie. A ponieważ nie jest to wcale Node, jest to przejście do v8.
— Evan Carroll

Dziękuję Ci! Zastanawiałem się, dlaczego nie mogę go znaleźć w dokumentacji Node CLI .
— Galen Long

18

Możesz również podać ścisłą flagę w dyrektywie interpretera shebang.

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

Ale obecnie (przynajmniej przed v0.9.x) cierpi na te same problemy, które opisują komentarze w omówieniu odpowiedzi @ chad-scira.


1
envnie pozwala na przekazywanie takich parametrów, prawda?
— Letharion

U mnie działa na OSX 10.9.4.
— John Lehmann,

1
tak - nadal stanowi przykład strasznej, egzekwowanej konwencji, czyli dwóch konkurujących ze sobą linii kodu, które muszą znajdować się na początku pliku.
— aaaaaa

7
Uwaga, envbędzie działać z takimi dodatkowymi parametrami w systemie OSX, ale nie w systemie Linux.
— AerandiR
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.