1. ホーム
  2. javascript

[解決済み] ESLintの "no-undef "ルールは、私のUnderscoreの使用を未定義の変数と呼んでいます。

2023-06-01 14:15:34

質問

現在開発中のアプリで、GruntをBuild Toolとして、ESLintをlinting Toolとして使用しています。また、私はUnderscore Nodeパッケージを使用しており、私のアプリでそれを使用しています。残念ながら、私のコードでESLintを実行すると、次の行で_が未定義の変数であると判断されます。

return _.pluck(objects, nameColumn);

このようなエラーが表示されます。

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

ESLintのno-undefルールを無効にしたくないので、Underscoreプラグインをインストールしてみましたが、やはりこのエラーが出てしまいます。もし、どなたかこの件で試すべきアイデアをお持ちでしたら、とても感謝しています!

もし、私がこの問題を解決するのを助けるために、さらに何か情報を与えることができるのであれば、私に知らせてください!

どのように解決するのですか?

この 公式ドキュメント を見れば、これを修正する方法がわかるはずです。

宣言されていない変数への参照は、その変数が明示的に /*global ...*/ のコメントで明示的に言及されているか、あるいは globals キーで指定されるか、あるいは設定ファイル .

最も簡単な修正方法は

/* global _ */

をファイルの先頭に追加してください。

あるいは、変数の上書きを禁止するために、その変数が読み取り専用であることを明示的に指定するのがよいでしょう。

/* global _:readonly */

しかし、新しいjsファイルを作成するたびにそれをしなければならないので、煩わしく感じることもあります。もしアンダースコアをよく使うのであれば、私は にグローバルを追加してください。 .eslintrc ファイル に、例えば

{
    "globals": {
        "_": "readonly"
    }
}

そして、これを .eslintrc として、プロジェクトのルートか、場合によってはユーザーのホームディレクトリに保存します。後者はお勧めしないという人もいますが、便利な場合もあるので、そこに保存してあることを忘れないようにしてください :)


上記ルールの説明 : "_": "readonly" (以前は "_": false であったが、現在は非推奨) は、変数名 _ という名前の変数は、eslint にこの変数がグローバルに定義されていることを伝えます。 no-undef エラーを出さないようにします。sebastianが指摘したように "readonly" (または false - 非推奨) は、その変数が上書きできないことを意味するので、コードでは _ = 'something else' というコードはエラーになります。 no-global-assign . もし、代わりに "_": "writable" (または "_": true - deprecated)であれば、値を再割り当てしても、先に述べたようなエラーは発生しないことを意味します。

しかし、これは例で示したようにグローバル変数に直接代入した場合のみ発生することに留意してください。シャドウしても、eslintは何も言いません。例えば、これらのスニペットでは no-global-assign :

const _ = 'haha I broke your _' 

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

function (_) {
  console.log(_, 'might not be the _ you were looking for') 
}