web-dev-qa-db-ja.com

インストールされたパッケージでESLintインポート/ no-extraneous-dependenciesエラーが発生する理由(および修正方法)

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には他にもたくさんのパッケージがありますが、問題があるのはこれら2つだけです。これはバグの可能性がありますが、ESLintには非常に多くの目があるので、何か間違ったことをしている可能性が高いと思う...何(これらのパッケージはpackage.jsonの他のパッケージとまったく同じに見えます)。

インストールされているにもかかわらず、これらの2つのパッケージ、およびこれらの2つのパッケージのみについてESLintの苦情を申し立てるために、誰かが(偶然に)私がやろうとしていることを提案できますか?

[〜#〜] edit [〜#〜]

ここに私の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": {}
    }
  }
}
18
machineghost

正しいルールを設定するために、エスリントに次を追加します。そして、はい、それをオフにすることもできますが、エラーは理由のためにあります。

"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

6
stevenvanc

同じ問題がありました。

私にとってそれを解決したのは、packageDirオプションを明示的に追加することでした:

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

DevDependenciesをtrueに設定するだけで解決しました。デフォルトではfalseです。

"import/no-extraneous-dependencies": [
        "error", {
           "devDependencies": true
        }
    ]
3
camelCase

devDependencies: packageDirまたはdevDependencies: false上記の解決策はうまくいきませんでしたが、最終的には解決しました。ここに私のために働いたものがあります:

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

devDependenciesの代わりにfalseにテストフォルダーをリストするだけです。

3
revelt