[英]ESLint couldn't find the plugin "eslint-plugin-@typescript-eslint"
我不确定我正在使用的东西是否存在错误,或者我是否只是在这里设置了错误,但是在运行eslint src --fix
about "eslint-plugin-@ 时,我从 eslint 收到了这个错误打字稿-eslint"
我已经指定了@TypeScript-eslint 文档中列出的插件,但是我收到了这个奇怪的错误,其中 eslint 试图将 'eslint-plugin-' 添加到插件名称的开头(package 名称是@typescript-eslint/eslint-plugin
typescript- @typescript-eslint/eslint-plugin
)
我正在使用 Gatsby 和随附的TypeScript 插件。
错误
$ eslint src --fix
Oops! Something went wrong! :(
ESLint: 4.19.1.
ESLint couldn't find the plugin "eslint-plugin-@typescript-eslint". This can happen for a couple different reasons:
1. If ESLint is installed globally, then make sure eslint-plugin-@typescript-eslint is also installed globally. A globally-installed ESLint cannot find a locally-installed plugin.
2. If ESLint is installed locally, then it's likely that the plugin isn't installed correctly. Try reinstalling by running the following:
npm i eslint-plugin-@typescript-eslint@latest --save-dev
.eslintrc.js:
module.exports = {
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaFeatures: {
jsx: true,
},
ecmaVersion: 2018,
sourceType: 'module',
},
env: {
browser: true,
node: true,
es6: true,
'jest/globals': true,
},
plugins: ['@typescript-eslint', 'react', 'jest'],
extends: [
'standard',
'plugin:react/recommended',
'plugin:@typescript-eslint/recommended',
'plugin:jest/recommended',
'plugin:prettier/recommended',
// 'eslint-config-prettier', // must be last
'prettier/@typescript-eslint',
],
rules: {
'react/prop-types': 0,
'jsx-quotes': ['error', 'prefer-single'],
'react/no-unescaped-entities': 0,
},
settings: {
react: {
version: 'detect',
},
linkComponents: [
// Components used as alternatives to <a> for linking, eg. <Link to={ url } />
'Hyperlink',
{ name: 'Link', linkAttribute: 'to' },
],
},
}
package.json
{
"name": "jmulholland.com",
"description": "My personal website",
"license": "MIT",
"scripts": {
"dev": "gatsby develop",
"build": "gatsby build",
"serve": "gatsby serve",
"lint": "eslint src --fix",
"prettier": "prettier \"**/*.+(js|jsx|ts|tsx|json|css|md|mdx|graphql)\"",
"format": "yarn prettier --write",
"type-check": "tsc --noEmit",
"validate": "yarn lint && yarn prettier --list-different"
},
"dependencies": {
"gatsby": "^2.1.4",
"gatsby-plugin-react-helmet": "^3.0.6",
"gatsby-plugin-styled-components": "^3.0.5",
"gatsby-plugin-typescript": "^2.0.10",
"gatsby-plugin-typography": "^2.2.7",
"gatsby-remark-prismjs": "^3.2.4",
"gatsby-source-contentful": "^2.0.29",
"gatsby-transformer-remark": "^2.3.0",
"prismjs": "^1.15.0",
"prop-types": "^15.7.2",
"react": "^16.8.2",
"react-dom": "^16.8.2",
"react-helmet": "^5.2.0",
"react-typography": "^0.16.18",
"styled-components": "^4.1.3",
"typography": "^0.16.18"
},
"devDependencies": {
"@typescript-eslint/eslint-plugin": "^1.4.2",
"@typescript-eslint/parser": "^1.4.2",
"babel-jest": "^24.1.0",
"babel-plugin-styled-components": "^1.10.0",
"babel-preset-gatsby": "^0.1.8",
"dotenv": "^6.0.0",
"eslint": "^4.19.1",
"eslint-config-prettier": "^4.1.0",
"eslint-config-standard": "^12.0.0",
"eslint-plugin-import": "^2.16.0",
"eslint-plugin-jest": "^22.3.0",
"eslint-plugin-jsx-a11y": "^6.2.1",
"eslint-plugin-node": "^8.0.1",
"eslint-plugin-prettier": "^3.0.1",
"eslint-plugin-promise": "^4.0.1",
"eslint-plugin-react": "^7.11.1",
"eslint-plugin-standard": "^4.0.0",
"faker": "^4.1.0",
"husky": "^1.3.1",
"jest": "^24.1.0",
"lint-staged": "^8.1.5",
"prettier": "^1.16.4",
"typescript": "^3.3.3333"
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
}
}
解决办法就是升级到最新版本的eslint
我在 Mac 上的解决方案就像
cd /usr/local/lib/node_modules/
rm -rf eslint
eslint index.js app storybook test --fix --ext .js,.ts,.tsx
我刚刚在一个大型 monorepo 上遇到了这个问题,找到了两个解决方案为我们解决了这个问题:
{
"scripts": {
"lint": "eslint src --resolve-plugins-relative-to ."
}
}
如果您使用纱线工作区, yarn run
也可以做到这一点:
{
"scripts": {
"lint": "yarn run eslint src"
}
}
不确定它是否仍然没有解决。 但是在我的 .eslintrc.json 中添加 '"root": true' 对我有帮助。
另一个可能导致此问题的原因是没有配置ESLint
。
就我而言,将.eslintrc.json
文件添加到根目录(使用适当的配置)修复了该问题。
由于我现在在使用eslint
遇到了同样的问题, eslint
我在这里发布了关于我的案例中问题的根本原因。
我安装了这个eslint-nullish-coalescing
插件,它是eslint
一个分支来取消合并。 这个插件改变了node_module\\.bin\\eslint.cmd
文件的内容。
从
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\..\eslint\bin\eslint.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\..\eslint\bin\eslint.js" %*
)
到
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\..\eslint-nullish-coalescing\bin\eslint.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\..\eslint-nullish-coalescing\bin\eslint.js" %*
)
因此,eslint 无法为其工作找到合适的插件,因此出现错误😰。
虽然 OP 没有使用eslint-nullish-coalescing
包,但如果有人现在面临这个问题,我建议验证node_modules\\.bin\\eslint.cmd
文件的内容。
对于未来可能面临此问题的任何读者,就我而言,我正在使用基于node:alpine
映像的多阶段 Docker 构建。 多阶段构建旨在分离应用程序的dependencies
和devDependencies
(在package.json
)。
在创建我的Dockerfile
某个时候,我在几个小时内进行了相当多的修改,我在我的Dockerfile
开头添加了以下行:
ENV NODE_ENV production
这会导致npm
忽略devDependencies
包,进而导致 ESLint 失败(因为它没有安装)。
我将环境变量声明移到我最初想要的最终(发布)构建阶段,然后npm
安装了所有必需的包并且 ESLint 成功运行。
希望这可以为某人节省一些宝贵的时间。
在我的情况下,父目录之一有另一个 node_modules 文件夹。
将包目录移动到父树中没有其他 node_modules 文件夹的路径中消除了错误。
最近,当我尝试在 2017 年创建并使用 Angular9 的项目中使用 eslint&prettier 时,我遇到了同样的问题。 在google了很多之后,我只是通过将eslint升级到8+版本来解决它。 版本 6+ 也可以,但版本 7+ 可能会导致另一个错误。 这真的很奇怪。
然后我添加了一个新脚本,例如 => "./node_modules/eslint/bin/eslint.js./ --ext.ts,.tsx --config.eslintrc.js --fix" 并且 eslint 工作正常。 你可以在 .eslintrc.js(on) 文件中添加一些配置,让 eslint 知道哪些文件应该被 linted 和格式化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.