2017-05-15 46 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": "./" 
    } 
] 
相關問題