web-dev-qa-db-ja.com

ESLintの「no-undef」ルールは、アンダースコアの使用を未定義変数と呼んでいます

Gruntをビルドツールとして使用し、ESLintを作業中のアプリのリンティングツールとして使用しています。 Underscore Nodeパッケージも使用しており、アプリで使用しています。残念ながら、コードでESLintを実行すると、_は次の行の未定義変数であると考えられます。

return _.pluck(objects, nameColumn);

これは私に与えているエラーです:

78:21 error "_" is not defined no-undef

ESLintのno-undefルールを無効にしたくないので、Underscoreプラグインをインストールしようとしましたが、このエラーが引き続き表示されます。他に誰かがこれを試してみるべきアイデアを持っているなら、私はとても感謝しています!

私がこれ以上理解できる情報があれば、それを理解するのを手伝ってくれる人を助けてくれるでしょう。

65
turner

公式ドキュメント は、これを修正する方法についてのアイデアを提供するはずです。

最も簡単な修正は追加することです

/* global _ */

ファイルの先頭に。

ただし、新しいjsファイルごとにこれを行う必要があるため、迷惑になる可能性があります。アンダースコアを頻繁に使用する場合は、 グローバルを.eslintrcファイルに追加 にすることをお勧めします。例:

{
    "globals": {
        "_": false
    }
}

そして、これをプロジェクトルートの.eslintrcとして保存するか、オプションでユーザーのホームディレクトリに保存します。後者は推奨されていないと言う人もいますが、便利な場合もありますが、そこにあることを覚えておく必要があります


上記のルールの説明"_": falseは、_という名前の変数がeslintにこの変数がグローバルに定義されていることを意味し、この変数に対してno-undefエラーを出力しません。 @sebastianが指摘したように、falseは変数を上書きできないことを意味するため、コード_ = 'something else'はエラーno-global-assignを生成します。代わりに"_": true(これは私の以前の回答でした)を使用する場合、これは値を再割り当てできることを意味し、前述のエラーは発生しません。

ただし、これは、例で示したようにグローバル変数に直接割り当てた場合にのみ発生することに注意してください。あなたはまだそれを隠すことができ、エスリントは何も言わないでしょう。たとえば、これらのスニペットはno-global-assignを生成しません。

const _ = 'haha I broke your _' 

または関数の引数名として、例えば.

function (_) {
  console.log(_, 'might not be the _ you were looking for') 
}
169
Marko Grešak

テストにjestを使用している場合-環境内-eslintrc.json

"env":{
    "jest":true
}
5
Leon Africa