2017-05-15 17 views
10

그러나왜 (그리고 어떻게 FIx 할 수 있습니까?) ESLint 가져 오기/외부 관련 없음 설치된 패키지의 실패? 나는 다음과 같은 오류를 얻을 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

당신은 부두 노동자를 사용하고 : 나를 위해 그것을 해결 무엇

명시 적으로 packageDir 옵션을 추가했다? –

+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

제안 해 주셔서 감사합니다.하지만 비활성화 코드를 추가했을 때 (필자는'rules'와'settings'로 모두 추가하려고 시도했습니다) 도움이되지 않았습니다.하지만 분명히 저는 어쨌든 규칙을 비활성화하고 싶습니다 : 그냥 정상적으로 작동하기를 원합니다. 수입품을 재실행하는 경우, 그건 실용적이지 않습니다 (우리는 많은 양의 로다시 수입품과 많은 수의 조이 고기를 가지고 있습니다). 게다가, 우리가 가지고있는 모든 Joi 수입 'const joi = require ('joi ');'와 같은 형태로되어 있습니다. – machineghost

+0

요구 사항을 권장하지 않았으므로이를 제거하는 것이 좋습니다. 왜냐하면 요구는 관계없는 의존으로 간주되기 때문입니다. 그래서 나는 그것을 수입에서 바꾸라고 제안했다. 또한 다른 타사 라이브러리를 많이 사용하는 경우 해당 라이브러리를 모두 제공하는 배럴 파일을 만드는 것이 좋습니다. 따라서 모든 코드를 변경하지 않고도 libs를 훨씬 쉽게 변경할 수 있습니다. – stevenvanc

+0

이것은 프론트 엔드와 백엔드 코드가 결합 된 코드베이스입니다 (Lodash는 양쪽 모두에서 사용되며 Joi는 백엔드에서만 사용됨). 프론트 엔드에서'import' 구문을 얻기 위해 Webpack을 사용하는 동안 우리는 백엔드가 아니기 때문에'require' 구문 만 사용할 수 있습니다. 어쨌든, 나는 내 코드베이스에서 반입 문장을 바꾸는 것을 요구하지 않아야한다. – machineghost

1

동일한 문제가있었습니다.

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