13

我正在尝试将 ESLint 集成到我的项目中,但运行时遇到错误: “找不到模块 'eslint-plugin-angular'”$ 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
    }
}

我在这里想念什么?谢谢!附言。我确实在 github 上开了一张票:https ://github.com/Gillespie59/eslint-plugin-angular/issues/222——只是想知道 Stack 社区中是否有人遇到过这个问题。

4

2 回答 2

21

在这里找到答案:http: //eslint.org/docs/user-guide/configuring#configuring-plugins

“注意:全局安装的 ESLint 实例只能使用全局安装的 ESLint 插件。本地安装的 ESLint 可以确保本地和全局安装的 ESLint 插件。”

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

有两种方法可以解决这个问题:

(1) 全局安装插件。我不是这方面的特别粉丝,因为我有多个客户端项目位于不同版本的依赖项上,我不一定将它们全部升级到相同版本。

(2) 在本地安装插件并将脚本添加到您的package.json文件中:

{
    ... other stuff
    "scripts": {
        "eslint": "eslint",
        "lint": "eslint. "
    }
    ... other stuff
}

(如果您对此完全陌生,请记住这... other stuff不是您在 package.json 文件中真正想要的...)

有了这个设置,我就可以npm run eslint使用eslintnpm run lint实际使用 lint 我的项目。

您可以在此处找到有关该文件scripts字段的package.json文档:https ://docs.npmjs.com/misc/scripts

于 2015-09-21T18:02:34.150 回答
2

如果您按照指南告诉您使用npm install -g eslint,这是安装 ESLint 的推荐方法,然后立即告诉您使用eslint --init为您的项目创建配置,您几乎肯定会遇到这个问题。问题是eslint --init 它将安装您需要的软件包,但它会在本地安装它们,即使它是从全局安装的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.jsonnpm prefix。它必须适应其他情况。

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

于 2016-05-21T21:02:42.170 回答