JSLintが突然報告します:「usestrict」関数フォームを使用してください



Jslint Suddenly Reports



私は次のステートメントを含めます:

'use strict'

私のほとんど Javascript ファイルの始まり。



JSLint これについて警告したことはありません。しかし今それは言う:

「厳密な使用」機能形式を使用します。



「機能形式」とは何か知っている人はいますか?


#1階

文字列の形式は本質的に正しいです。

非厳密なJavaScriptを接続する「グローバル」な厳密な形式について心配するのを避けるよりも、忌まわしい非厳密なJavaScriptをstrictに修正する方がよい場合があります。




#2階

簡単です。すべてのコードを厳密にしたい場合は、'use strict'を追加します。 JavaScriptの開始時。

ただし、特定のコードのみを厳守したい場合は、関数フォームを使用してください。いずれにせよ、JavaScriptの最初に使用することをお勧めします。これは、より優れたエンコーダーになるのに役立ちます。


#3階

NodeJSのモジュールを作成している場合、それらはすでにカプセル化されています。ファイルの先頭にJSLintを含めて、ノードがあることを伝えます。

/*jslint node: true */

#4階

使用することをお勧めします jshint

合格することができます/*jshint globalstrict: true*/この警告を抑制します。

ライブラリを作成している場合は、グローバルコード(nodejsなど)をモジュールにカプセル化するときにのみ、globalstrictを使用することをお勧めします。

それ以外の場合は、ライブラリを使用しているすべてのユーザーを強制モードにします。


#5階

私はここにいます クロスプラットフォームJavaScript ブログ投稿がNode.js / browserifyアプリケーションの作成を開始した後。私の新しいGruntfileがjshintを通過しなかったため、この問題が発生しました。

幸いなことに、私は LeanpubのGruntに関する本の中で 答えが見つかりました:

今試してみると、Gruntfileをスキャンします...そしていくつかのエラーが発生します:

$ grunt jshint Running 'jshint:all' (jshint) task Linting Gruntfile.js...ERROR [L1:C1] W097: Use the function form of 'use strict'. 'use strict' Linting Gruntfile.js...ERROR [L3:C1] W117: 'module' is not defined. module.exports = function (grunt) { Warning: Task 'jshint:all' failed. Use --force to continue.

どちらのエラーも、Gruntfileがノードプログラムであり、デフォルトでは、JSHintがそれを認識または使用を許可しないためですmoduleおよびuse strict文字列バージョン。 Nodeプログラムを受け入れるようにJSHintルールを設定できます。 jshintタスク構成を編集して、オプションキーを追加しましょう。

jshint: { options: { node: true }, }

jshintの場合options追加node: true 、jshintを「ノードモード」にすると、これら2つのエラーが解消されました。


#6階

プロジェクトのルートディレクトリにファイル.jslintrc(jshintの場合は.jshintrc)を追加します。内容は次のとおりです。

{ 'node': true }

#7階

私は誰もが問題の「突然の」部分を見逃したと思います。 .jshintrcには構文エラーがある可能性が高いため、「ブラウザ」行は含まれていません。 jsonバリデーターを実行して、エラーがどこにあるかを確認します。


#8階

含める'use strict'ラッパー関数の最初のステートメントとして、関数にのみ影響します。これにより、厳密ではないスクリプトを接続する際の問題を防ぐことができます。

ダグラス・クロックフォードの最新のブログ投稿を参照してください。 厳格なモードが来ています」

この投稿の例:

(function () { 'use strict' // this function is strict... }()) (function () { // but this function is sloppy... }())

更新: 即時関数をラップしたくない場合(たとえば、ノードモジュールの場合)、警告を無効にすることができます。

ために JSLint (各 ザミ ):

/*jslint node: true */

ために JSHint

/*jshint strict:false */

または(によると レイス・シェードの声明 )。

/* jshint -W097 */

JSHintからの警告を無効にするには、以下を確認してください。 ソースコードのJSHint のマッピング(で ドキュメントには 詳細)。

アップデート2: JSHint スタンバイnode:booleanオプション。見る githubで.jshintrc

/* jshint node: true */