找不到模块 'eslint-plugin-angular'

Cannot find module 'eslint-plugin-angular'

我正在尝试将 ESLint 集成到我的项目中,但我 运行 遇到错误:"Cannot find module 'eslint-plugin-angular'" 当我 运行 $ eslint *.js.

我能达到 运行 的唯一方法是全局安装 eslint-plugin-angular,但这似乎是错误的(除非我遗漏了什么??)。

我是运行宁:

ESLint 已全局安装。

我的 package.json 文件包含以下条目:

我有 $ rm -rf node_modules 和 re运行 $ 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

"Note: A globally-installed instance of ESLint can only use globally-installed ESLint plugins. A locally-installed ESLint can make sure of both locally- and globally- installed ESLint plugins."

这属于阅读文档中的细则。 :/

有两种处理方法:

(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

如果你遵循一个告诉你使用 npm install -g eslint 的指南,你肯定 运行 遇到这个问题,这是安装 ESLint 的推荐方法,然后立即告诉您使用 eslint --init 为您的项目创建配置。问题是 eslint --init 安装您需要的软件包,但它会 在本地 安装它们,即使它正在 运行 来自全局安装的 eslint。在我尝试在 Emacs 中编辑文件并且 flycheck 报告来自 ESLint 的错误之前,我 none 变得更聪明了:

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 的项目结构(即 npm prefix 可以找到一个 package.json)。它必须适应其他情况。

我的全局 eslint 位于一个不寻常的位置,调整脚本以将其指向您安装它的位置。