ESLintをプロジェクトに統合しようとしていますが、次のエラーが発生します: "モジュール 'eslint-plugin-angular'が見つかりません"when $ eslint *.js
を実行します。
これを実行する唯一の方法は、eslint-plugin-angularをグローバルにインストールすることですが、それは間違っているようです(何かが足りない場合を除きますか??)。
私が実行している:
ESLintはグローバルにインストールされます。
私のpackage.json
ファイルには次のエントリがあります。
$ rm -rf node_modules
があり、$ npm install
を再実行して、何らかのnpm依存関係の問題や破損がないことを確認します。また、node_modules
のディレクトリ権限を確認して、アクセスが可能であることを確認しました。
私の.eslintrc
に含まれるもの:
{
"plugins": [
"angular"
],
"rules": {
"angular/ng_controller_name": [
2,
"/[A-Z].*Controller$/"
],
"quotes": [
2,
"single"
]
},
"globals": {
"angular": true
}
}
ここで何が欠けていますか?どうも! ps。私はgithubでチケットを開きました: https://github.com/Gillespie59/eslint-plugin-angular/issues/222 -Stackコミュニティの誰かがこれに遭遇したかどうか疑問に思っています。
ここで答えが見つかりました: http://eslint.org/docs/user-guide/configuring#configuring-plugins
「注:グローバルにインストールされたESLintのインスタンスは、グローバルにインストールされたESLintプラグインのみを使用できます。ローカルにインストールされたESLintは、ローカルとグローバルにインストールされたESLintプラグインの両方を確認できます。」
これは、ドキュメントの詳細を読むことに該当します。 :/
これに対処するには2つの方法があります。
(1)プラグインをグローバルにインストールします。依存関係のバージョンが異なる複数のクライアントプロジェクトがあり、必ずしもすべてを同じバージョンにバンプできるとは限らないため、私はこれが特に好きではありません。
(2)プラグインをローカルにインストールし、スクリプトをpackage.json
ファイルに追加します。
{
... other stuff
"scripts": {
"eslint": "eslint",
"lint": "eslint. "
}
... other stuff
}
(これにまったく慣れていない場合は、... other stuff
がpackage.jsonファイルに実際に必要なものではないことに注意してください...)
この設定では、npm run eslint
を使用してeslint
を使用し、npm run lint
を使用して実際にプロジェクトをリントすることができます。
package.json
ファイルのscripts
フィールドにドキュメントがあります: https://docs.npmjs.com/misc/scripts
ESLintをインストールするための推奨される方法であるnpm install -g eslint
を使用するように指示するガイドに従い、すぐにeslint --init
を使用するように指示すると、この問題が発生することがほぼ確実です。プロジェクトの構成を作成します。問題は、eslint --init
will必要なパッケージをインストールしますが、グローバルにインストールされたeslint
。 Emacsでファイルを編集しようとし、flycheck
がESLintからエラーを報告するまで、私は賢明ではありませんでした。
Error: Failed to load plugin react: Cannot find module 'eslint-plugin-react'
at Function.Module._resolveFilename (module.js:325:15)
at Function.Module._load (module.js:276:25)
[...]
グローバルインストールとローカルインストールの両方を許可したいと思います。まだチェックしたいが特定のプロジェクトに属していない実験的なコードや、より具体的なニーズのあるローカルインストールには、グローバルコードを使用する場合があります。そこで、~/bin/eslint
として保存されたスクリプトを作成しました。 ~/bin
は私のPATH
の初期段階にあるため、このスクリプトは、グローバルにインストールするeslint
の代わりに使用されます。
#!/bin/sh
# Find the top of the code hierarchy, and move there.
prefix=`npm prefix`
[ -n $prefix ] && cd $prefix
# Execute the local eslint if it exists.
local_eslint=./node_modules/.bin/eslint
[ -x $local_eslint ] && exec $local_eslint "$@"
# If not, execute the global one.
exec /path/to/global/eslint "$@"
(知らない人にとっては、exec
が最終です。最初のexec
が実行された場合、それ以降は何も実行されません。)
このスクリプトは、npm
に適したプロジェクト構造を想定しています(つまり、package.json
が見つけることができるnpm prefix
があります)。それは他の状況に適応しなければならないでしょう。
私のグローバルeslint
は異常な場所にあります。スクリプトを適応させて、インストールした場所を指すようにします。