Gibt es eine Möglichkeit, den strengen Modus im Knoten zu erzwingen?


140

Diese Antwort konnte nirgendwo gefunden werden, aber ich habe mehrere Mailinglisten gefunden, in denen dies besprochen wurde. Diese sind jedoch ziemlich alt und ich habe keine Ahnung, ob dies implementiert ist oder nicht.

Gibt es überhaupt eine Möglichkeit, den strengen Modus in node.js zu erzwingen?

Schreiben "use strict";in alle meine .js-Dateien ... nun, ich bevorzuge es, den strengen Modus zu verwenden, anstatt zusätzliche Boilerplate hinzuzufügen.

Antworten:


209

Laut Lloyd können Sie jetzt platzieren

"use strict";

am Anfang Ihrer Datei in Knoten> = 0.10.7 , aber wenn Sie möchten, dass Ihre gesamte App streng ausgeführt wird ( einschließlich externer Module ), können Sie dies tun

Knoten --use_strict


eek: fs.js: 1497 function emit () {^^^^^^^^ SyntaxError: Im strengen Moduscode können Funktionen nur auf oberster Ebene oder unmittelbar innerhalb einer anderen Funktion deklariert werden.
j03m

1
oh O_o, also kannst du das Dateisystem nicht benutzen, wenn du streng erzwingst? Welche Version des Knotens verwenden Sie, ich bekomme dies nicht auf v0.8.12
Chad Scira

1
'v0.8.16' <--- hmm ungerade. Lass mich nachsehen.
j03m

13
In Knoten v0.9.x und höher --use_strictfunktioniert das Flag wie erwartet.
TooTallNate

21
Beachten Sie, dass --use_strictder strikte Modus für die gesamte Anwendung festgelegt wird, einschließlich aller externen Module, die außerhalb Ihrer Steuerelemente liegen.
Lewis

58

In Knoten 0.10.7 können Sie den strengen Modus auf Dateiebene erzwingen, indem Sie ihn "use strict";oben in Ihre Datei einfügen . Schließlich!


25

Sie können auch verwenden

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

das heißt, schreibe einmal

require('use-strict')

oder sogar einen Schritt nach vorne machen und verwenden

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

Bitte beachten Sie, dass use-strictbei jedem Modul, das nach dem Aufruf benötigt wird, mehr aktiviert wird.

Wenn Sie einen nicht invasiven Ansatz bevorzugen, habe ich ein anderes Modul geschrieben

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

Dies aktiviert den strengen Modus nur in Ihrem Paket. Ich denke, das ist eher eine "Do What I Mean" -Lösung.


20

Verwenden Sie einfach "use strict";oben in den entsprechenden Dateien. Ich weiß, es ist verlockend zu versuchen, Boilerplate auszuschneiden, aber es kann einfach nicht in Javascript gemacht werden. Das Knotenflag, das nicht benannt werden soll [1]

  • ist nicht dokumentiert und wird von Node selbst nicht unterstützt.
  • hat Vorschläge zur Entfernung erhalten.
  • ist knotenspezifisch und wird in keiner anderen JavaScript-Engine unterstützt.
  • ist nicht standardisiert.
  • Es ist nicht dasselbe wie, "use strict";weil es sich um einen globalen Compiler handelt, und wie bei allen Globalen wirken Sie sich möglicherweise nachteilig auf den Code eines anderen aus.
  • Alles ist fehleranfällig. Strict Mode und Sloppy-Mode können unterschiedlichen Fehlern unterliegen. Das heißt, einige Fehler im strengen Modus sind nur im strengen Modus zu finden

Einige andere Programmierer denken möglicherweise, dass dies ähnlich -wALLoder ähnlich ist, aber nicht. Dies ist eine standardisierte Funktionalität, die Sie ad-hoc aktivieren (gegen den Standard verstoßen) und die Compilersemantik aller ändern.

Fußnoten

  1. Das Knotenflag ist --use_strict. Benutze es nicht .

1
Können Sie mir sagen, wo Sie festgestellt haben, dass es "von Node nicht unterstützt" wird? Wird das nur aus der Tatsache abgeleitet, dass es nicht dokumentiert ist?
Puschkin

Meist. Und weil es überhaupt keine Node-Sache ist, ist es ein Durchgang zu Version 8.
Evan Carroll

Danke dir! Ich fragte mich, warum ich es in den Node-Cli-Dokumenten nicht finden konnte .
Galen Long

18

Sie können auch das strikte Flag in der Shebang-Interpreter-Direktive angeben.

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

Derzeit (zumindest vor Version 0.9.x) treten jedoch dieselben Probleme auf, die in den Kommentaren in der Antwort von @ chad-scira beschrieben werden.


1
envSie können solche Parameter nicht übergeben, oder?
Letharion

Funktioniert für mich unter OSX 10.9.4.
John Lehmann

1
Ja - ist immer noch ein Beispiel für eine schrecklich erzwungene Konvention, bei der es sich um zwei konkurrierende Codezeilen handelt, die sich oben in einer Datei befinden müssen.
aaaaaa

7
Achtung, envfunktioniert mit zusätzlichen Parametern wie diesen unter OSX, aber nicht unter Linux.
AerandiR
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.