web-dev-qa-db-ja.com

モジュール 'eslint-plugin-angular'が見つかりません

ESLintをプロジェクトに統合しようとしていますが、次のエラーが発生します: "モジュール 'eslint-plugin-angular'が見つかりません"when $ eslint *.jsを実行します。

これを実行する唯一の方法は、eslint-plugin-angularをグローバルにインストールすることですが、それは間違っているようです(何かが足りない場合を除きますか??)。

私が実行している:

  • ノードv0.12.7
  • npm 3.3.4
  • eslint v1.5.0
  • eslint-plugin-angular 0.12.0

ESLintはグローバルにインストールされます。

私のpackage.jsonファイルには次のエントリがあります。

  • "eslint": "^ 1.5.0"、
  • "eslint-plugin-angular": "^ 0.12.0"、

$ 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コミュニティの誰かがこれに遭遇したかどうか疑問に思っています。

11
jpoveda

ここで答えが見つかりました: 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

20
jpoveda

ESLintをインストールするための推奨される方法であるnpm install -g eslintを使用するように指示するガイドに従い、すぐにeslint --initを使用するように指示すると、この問題が発生することがほぼ確実です。プロジェクトの構成を作成します。問題は、eslint --initwill必要なパッケージをインストールしますが、グローバルにインストールされた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は異常な場所にあります。スクリプトを適応させて、インストールした場所を指すようにします。

1
Louis