2017-05-15 47 views
10

当我运行ESLint我收到以下错误:为什么(以及我如何才能FIx)ESLint安装软件包导入/无 - 无关依赖关系失败?

1:13 error 'joi' should be listed in the project's dependencies. Run 'npm i -S joi' to add it  import/no-extraneous-dependencies 
2:16 error 'lodash' should be listed in the project's dependencies. Run 'npm i -S lodash' to add it import/no-extraneous-dependencies 

不过,我有两个安装的模块,并以我package.json

"joi": "^10.4.2", 
// Some other packages 
"lodash": "^4.17.2", 

和运行:

npm i -S joi 

没有帮助或解决问题。另外我的package.json中还有大量的其他软件包,只有那两个有问题。这是可能这是一个错误,但ESLint有这么多的眼睛,我认为这更可能是我做错了什么......只有我无法弄清楚什么(这些包看起来跟任何东西一样其他在我的package.json)。

任何人都可以建议我可能在做什么(无意)使ESLint投诉有关这两个软件包,只有这两个软件包,尽管它们被安装?

编辑

这里是我的package.json(除去一些不相关的识别位):

{ 
    "name": "foo", 
    "version": "1.0.0", 
    "engines": { 
    "node": "6.9.4" 
    }, 
    "scripts": { 
    "some": "scripts", 
    }, 
    "ava": { 
    "babel": "inherit", 
    "require": "babel-register", 
    "serial": true, 
    "verbose": true 
    }, 
    "devDependencies": { 
    "@3846masa/axios-cookiejar-support": "0.0.4", 
    "apidoc": "^0.17.5", 
    "ava": "^0.17.0", 
    "babel-eslint": "^7.1.1", 
    "babel-plugin-module-alias": "^1.6.0", 
    "babel-react-render-defender": "^1.1.1", 
    "chai": "^3.5.0", 
    "chai-enzyme": "^0.6.1", 
    "del": "^2.2.2", 
    "enzyme": "^2.6.0", 
    "eslint": "^3.19.0", 
    "eslint-config-airbnb": "^13.0.0", 
    "eslint-import-resolver-babel-module": "^3.0.0", 
    "eslint-plugin-babel": "^4.0.0", 
    "eslint-plugin-import": "^2.2.0", 
    "eslint-plugin-jsx-a11y": "^2.2.3", 
    "eslint-plugin-react": "^6.8.0", 
    "jsdom": "^9.9.1", 
    "nodemon": "^1.11.0", 
    "proxyquire": "^1.7.10", 
    "react-addons-test-utils": "^15.4.1", 
    "react-hot-loader": "^3.0.0-beta.6", 
    "really-need": "^1.9.2", 
    "redux-devtools-extension": "^1.0.0", 
    "s3rver": "^1.0.2", 
    "sinon": "^1.17.6", 
    "style-loader": "^0.13.1", 
    "supertest": "^2.0.1" 
    }, 
    "dependencies": { 
    "autoprefixer": "^6.5.4", 
    "ava": "^0.17.0", 
    "aws-sdk": "^2.7.21", 
    "axios": "^0.15.3", 
    "babel-core": "^6.20.0", 
    "babel-loader": "^6.2.9", 
    "babel-plugin-lodash": "^3.2.11", 
    "babel-plugin-module-resolver": "^2.5.0", 
    "babel-plugin-transform-decorators-legacy": "^1.3.4", 
    "babel-plugin-transform-object-rest-spread": "^6.22.0", 
    "babel-plugin-transform-runtime": "^6.15.0", 
    "babel-preset-decorators-legacy": "^1.0.0", 
    "babel-preset-es2015": "^6.18.0", 
    "babel-preset-react": "^6.16.0", 
    "babel-runtime": "^6.20.0", 
    "bluebird": "^3.4.6", 
    "body-parser": "^1.17.1", 
    "celebrate": "^4.0.0", 
    "chai-diff": "^1.0.1", 
    "classnames": "^2.2.5", 
    "clipboard": "^1.6.1", 
    "compression": "^1.6.2", 
    "cookie-parser": "^1.4.3", 
    "cookie-session": "^2.0.0-alpha.2", 
    "core-decorators": "^0.15.0", 
    "csrf": "^3.0.6", 
    "css-mqpacker": "^5.0.1", 
    "cssnano": "^3.9.1", 
    "debug": "^2.6.0", 
    "dotenv": "^2.0.0", 
    "express": "^4.14.0", 
    "express-sanitizer": "^1.0.2", 
    "extract-text-webpack-plugin": "^1.0.1", 
    "faker": "^3.1.0", 
    "feedparser": "^2.0.0", 
    "file-loader": "^0.10.0", 
    "flatpickr": "^2.6.1", 
    "helmet": "^3.5.0", 
    "html-webpack-plugin": "^2.28.0", 
    "immutability-helper": "^2.1.1", 
    "joi": "^10.4.1", 
    "js-cookie": "^2.1.3", 
    "json-loader": "^0.5.4", 
    "jsonp-promise": "^0.1.2", 
    "knex": "0.12.9", 
    "libxmljs": "^0.18.4", 
    "lodash": "^4.17.2", 
    "lodash-webpack-plugin": "^0.11.0", 
    "moment": "^2.18.1", 
    "morgan": "^1.7.0", 
    "node-fetch": "^1.6.3", 
    "pg": "^6.1.2", 
    "plist": "^2.0.1", 
    "postcss": "^5.2.6", 
    "postcss-custom-media": "^5.0.1", 
    "postcss-custom-properties": "^5.0.1", 
    "postcss-import": "^9.0.0", 
    "postcss-loader": "^1.2.1", 
    "raw-loader": "^0.5.1", 
    "rc-time-picker": "^2.3.3", 
    "react": "^15.4.1", 
    "react-addons-shallow-compare": "^15.4.2", 
    "react-dnd": "^2.2.3", 
    "react-dnd-html5-backend": "^2.2.3", 
    "react-dom": "^15.4.1", 
    "react-flatpickr": "^3.3.0", 
    "react-json-tree": "^0.10.1", 
    "react-modal": "^1.6.5", 
    "react-redux": "^5.0.0", 
    "react-router": "^3.0.0", 
    "react-router-redux": "^4.0.7", 
    "react-sortable-hoc": "^0.6.1", 
    "react-virtualized": "^8.11.4", 
    "recompose": "^0.23.1", 
    "redux": "^3.6.0", 
    "redux-actions": "^1.2.0", 
    "redux-debounce": "^1.0.1", 
    "redux-logger": "^2.7.4", 
    "redux-promise": "^0.5.3", 
    "redux-thunk": "^2.1.0", 
    "reselect": "^2.5.4", 
    "stylelint": "^7.7.0", 
    "svg-react-loader": "^0.4.0-beta.2", 
    "svgo": "^0.7.1", 
    "to-exports": "^0.1.0", 
    "twit": "^2.2.5", 
    "url-loader": "^0.5.7",, 
    "webpack": "^1.14.0", 
    "webpack-dev-middleware": "^1.8.4", 
    "webpack-hot-middleware": "^2.15.0", 
    "webpack-split-chunks": "^0.1.1", 
    "xmlbuilder": "^8.2.2" 
    } 
} 

正如你可以看到它是非常简单的;只是很多包。这是我的.eslintrc

{ 
    "extends": "airbnb", 
    "env": { 
    "browser": true, 
    "node": true 
    }, 
    "globals": { 
    "NODE_ENV": true, 
    "isProduction": true, 
    "__ROUTE__": true 
    }, 
    "parser": "babel-eslint", 
    "plugins": [ 
    "babel" 
    ], 
    "rules": { 
    "react/jsx-filename-extension": [ 
     "error", 
     { 
     "extensions": [ 
      ".js", 
      ".jsx" 
     ] 
     } 
    ], 
    "comma-dangle": [ 
     "error", 
     { 
     "arrays": "always-multiline", 
     "objects": "always-multiline", 
     "imports": "always-multiline", 
     "exports": "always-multiline", 
     "functions": "ignore" 
     } 
    ], 
    "eol-last": "error", 
    "import/order": "error", 
    "This next rule is just temporary until we start using PropTypes": 0, 
    "react/prop-types": 0 
    }, 
    "settings": { 
    "import/resolver": { 
     "babel-module": {} 
    } 
    } 
} 
+0

您使用的码头工人? –

+0

不,这只是一个普通的旧Mac环境。感谢您花时间询问。 – machineghost

+0

你可以把你的package.json和你的.eslintrc? –

回答

3

以下内容添加到您的eslint,只需要有正确的规则在里面。是的,你也可以关闭它,但错误是有原因的。

"import/no-extraneous-dependencies": ["error", {"devDependencies": false, "optionalDependencies": false, "peerDependencies": false}] 

据我所知,你的package.json没有问题,所以它必须是一个语法问题。

我没有你的代码,所以我将显示例子:

var _ = require('lodash'); 
import _ from 'lodash'; 

如果你有上面的代码(或类似的东西)

然后将其更改为:

import test from 'ava'; 
import find from 'lodash.find'; 

你可以在这里阅读更多:

https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-extraneous-dependencies.md

+0

感谢您的建议,但即使当我添加禁用代码(我试图将它添加为“规则”和“设置”),但没有帮助。我不希望禁用规则:我只是想让它正常工作,至于重做我的进口产品,这并不是真正可行的(我们有很多Lodash进口产品,还有相当数量的Joi产品)另外,我们有每一个Joi进口是相同的,他们都是你推荐的格式:'const Joi = require('joi');'。 – machineghost

+0

我不建议要求,我建议消除它们。因为一个需求被看作是一个无关的依赖。所以我建议在进口中改变它。另外,如果您使用其他第三方库,我建议制作一个桶文件,以便返回所有这些库。所以你可以更容易地更换库,而无需更改所有代码。 – stevenvanc

+0

这是一个组合的前端和后端代码库(两者都使用Lodash,而Joi仅使用后端代码)。虽然我们使用Webpack在前端获得'import'语法,但我们不在后端,所以我们只能在那里使用'require'语法。无论如何,我觉得任何解决在linter中出现误报的解决方案都不应该要求(无双关语)在我的代码库中更改一半的import语句。 – machineghost

1

我有同样的问题。

什么解决了这个问题对我来说是添加一个明确的选择packageDir:

"import/no-extraneous-dependencies": [ 
    "error", { 
     "devDependencies": false, 
     "optionalDependencies": false, 
     "peerDependencies": false, 
     "packageDir": "./" 
    } 
] 
相关问题