ノードで厳密モードを強制する方法はありますか?


141

この回答はどこにも見つかりませんでしたが、これが議論されたメーリングリストはいくつか見つかりました。これらはかなり古いものですが、実装されているかどうかはわかりません。

とにかくnode.jsでstrictモードを使用することを強制するのですか?

書き込み"use strict";すべての私の.jsファイルに...よく、私はそれがstrictモードを使用して、というよりも余分に定型を追加することを余儀なくされていることを好みます。

回答:


210

ロイドによると、あなたは今置くことができます

"use strict";

ノード内のファイルの先頭> = 0.10.7ですが、アプリ全体をstrict(外部モジュールを含む)で実行したい場合は、これを行うことができます

ノード--use_strict


eek:fs.js:1497 function emit(){^^^^^^^^ SyntaxError:strictモードのコードでは、関数は最上位または別の関数内でのみ宣言できます。
— j03m

1
ああ、O_o、厳密に強制するとファイルシステムを使用できませんか?どのバージョンのノードを使用しているか、v0.8.12ではこれが得られない
— チャド・

1
'v0.8.16' <---うーん奇数。確認してみましょう。
— j03m

13
ノードv0.9.x以降では、--use_strictフラグは期待どおりに機能します。
— TooTallNate 2013

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]

  • ドキュメント化されておらず、ノード自体によってサポートされていません。
  • それを削除する提案に直面しています。
  • ノード固有であり、他のJavaScriptエンジンではサポートされていません。
  • 標準化されていません。
  • これは、コンパイラグローバルであり、他の誰かのコードに悪影響を与える可能性があるすべてのグローバルと同じではありません"use strict";。
  • すべてがバグの影響を受けます。strictモードとsloppy-modeは異なるバグの影響を受ける可能性があります。つまり、一部の厳格モードのバグは厳格モードに固有のものです

他の一部のプログラマーは、これは似ていると思っているかもしれ-wALLませんが、そうではありません。これは、アドホックな方法で有効にし(標準に違反)、全員のコンパイラセマンティクスを変更する標準化された機能です。

脚注

  1. ノードフラグは--use_strictです。使用しないでください。

1
「ノードでサポートされていない」とわかった場所を教えてください。それは文書化されていないという事実から推測されただけですか?
— プーシキン

主に。そして、それはまったくNodeのものではないので、v8へのパススルーです。
— エヴァンキャロル

ありがとうございました!Node cli docsでそれが見つからないのはなぜですか。
— ガレンロング

18

shebangインタープリターディレクティブにstrictフラグを指定することもできます。

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

しかし、現在(少なくともv0.9.x以前)、@ chad-sciraの回答で説明されているコメントで説明されているのと同じ問題が発生します。


1
envそのようなパラメータを渡すことはできませんか?
— Letharion 14

OSX 10.9.4で動作します。
— ジョンレーマン

1
ええ-それでも、ファイルの先頭になければならないコードの2つの競合する行である、ひどい強制された慣例をまだ例示しています。
— aaaaaa 2015年

7
、用心envOSX上ではなく、Linux上でそのような余分なパラメータで動作します。
— AerandiR、2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.