NPM需要一个peer,但所有的peer都在package.json和node_modules中

我面临的问题,安装npm说

npm WARN eslint-config-react-app@2.0.1 requires a peer of babel-eslint@^7.2.3 but none was installed. npm WARN eslint-config-react-app@2.0.1 requires a peer of eslint-plugin-jsx-a11y@^5.1.1 but none was installed. npm WARN semantic-ui-react@0.74.2 requires a peer of react@>=0.14.0 <= 15 but none was installed. npm WARN semantic-ui-react@0.74.2 requires a peer of react-dom@>=0.14.0 <= 15 but none was installed. 

我觉得很奇怪的是,实际上我的package.json中有这些依赖关系,并且也在node_modules文件夹中看到它们。

我的package.json:

 { "name": "react-box", "version": "0.1.0", "private": true, "devDependencies": { "autoprefixer": "7.1.4", "babel-core": "6.26.0", "babel-eslint": "^8.0.1", "babel-jest": "21.2.0", "babel-loader": "7.1.2", "babel-preset-react-app": "^3.0.3", "case-sensitive-paths-webpack-plugin": "2.1.1", "chalk": "2.1.0", "connect-history-api-fallback": "1.3.0", "cross-spawn": "5.1.0", "css-loader": "0.28.7", "detect-port": "1.2.1", "dotenv": "4.0.0", "eslint": "4.8.0", "eslint-config-react-app": "^2.0.1", "eslint-loader": "1.9.0", "eslint-plugin-flowtype": "2.38.0", "eslint-plugin-import": "2.7.0", "eslint-plugin-jsx-a11y": "^6.0.2", "eslint-plugin-react": "7.4.0", "extract-text-webpack-plugin": "3.0.1", "file-loader": "1.1.5", "filesize": "3.5.10", "fs-extra": "4.0.2", "gzip-size": "4.0.0", "html-webpack-plugin": "2.30.1", "http-proxy-middleware": "0.17.4", "jest": "21.2.1", "json-loader": "0.5.7", "object-assign": "4.1.1", "path-exists": "3.0.0", "postcss-loader": "2.0.6", "promise": "8.0.1", "react-dev-utils": "^4.1.0", "recursive-readdir": "2.2.1", "strip-ansi": "4.0.0", "style-loader": "0.19.0", "truffle-contract": "^3.0.0", "truffle-solidity-loader": "0.0.8", "url-loader": "0.6.2", "webpack": "3.6.0", "webpack-dev-server": "2.9.1", "webpack-manifest-plugin": "1.3.2", "whatwg-fetch": "2.0.3" }, "dependencies": { "axios": "^0.16.2", "babel-eslint": "^8.0.1", "dotenv": "^2.0.0", "react": "^16.0.0", "react-countup": "^2.2.0", "react-dom": "^16.0.0", "semantic-ui-react": "^0.74.2" }, "scripts": { "start": "node scripts/start.js", "build": "node scripts/build.js", "test": "node scripts/test.js --env=jsdom" }, "jest": { "collectCoverageFrom": [ "src/**/*.{js,jsx}" ], "setupFiles": [ "<rootDir>/config/polyfills.js" ], "testMatch": [ "<rootDir>/src/**/__tests__/**/*.js?(x)", "<rootDir>/src/**/?(*.)(spec|test).js?(x)" ], "testEnvironment": "node", "testURL": "http://localhost", "transform": { "^.+\\.(js|jsx)$": "<rootDir>/node_modules/babel-jest", "^.+\\.css$": "<rootDir>/config/jest/cssTransform.js", "^(?!.*\\.(js|jsx|css|json)$)": "<rootDir>/config/jest/fileTransform.js" }, "transformIgnorePatterns": [ "[/\\\\]node_modules[/\\\\].+\\.(js|jsx)$" ], "moduleNameMapper": { "^react-native$": "react-native-web" }, "moduleFileExtensions": [ "web.js", "js", "json", "web.jsx", "jsx" ] }, "babel": { "presets": [ "react-app" ] }, "eslintConfig": { "extends": "react-app" } } 

当试图像这样手动安装这些节点时:

 npm install babel-eslint --save-dev 

我仍然得到错误:

 ├── UNMET PEER DEPENDENCY babel-eslint@8.0.1 ├── UNMET PEER DEPENDENCY eslint-plugin-jsx-a11y@6.0.2 ├── UNMET PEER DEPENDENCY react@16.0.0 └── UNMET PEER DEPENDENCY react-dom@16.0.0 

也许我不明白如何NPM的作品,但我的理解做安装手动至less应该解决它,对不对?

如果有人需要更多的信息只是评论,我会提供额外的信息。 谢谢!

在这里,关于peerDeps版本不匹配的NPM警告是正确的。 这些软件包已安装,但已安装的版本不受其他一些软件包的支持。

在你的情况 – 他们太新了,这意味着警告包的维护人员尚未更新到这些版本。 并在API兼容的范围内限制了所需的peerDeps版本(没有中断/重大版本的飞跃)。

eslint-config-react-app@2.0.1需要peer deps: babel-eslint@^7.2.3 (即7.xx)和eslint-plugin-jsx-a11y@^5.1.1 (即5.xx)。

你的版本是"babel-eslint": "^8.0.1""eslint-plugin-jsx-a11y": "^6.0.2" 。 第一个数字 – 主要 – 不匹配。 这是(^符号)标记是关于什么的。

semantic-ui-react – 他们不支持react@16 (🤗我不能等)!

在此之前,您可以安装确切主要版本的软件包:

 > npm view babel-eslint@7.* version // list released versions in required range 7.xx babel-eslint@7.0.0 '7.0.0' babel-eslint@7.1.0 '7.1.0' babel-eslint@7.1.1 '7.1.1' babel-eslint@7.2.0 '7.2.0' babel-eslint@7.2.1 '7.2.1' babel-eslint@7.2.2 '7.2.2' babel-eslint@7.2.3 '7.2.3' > npm install --save-dev babel-eslint@7.2.3 // install latest version in required range 

与其他软件包一样。

PS:另外,在package.json您必须删除重复logging: dependencies babel-eslintdotenv ,因为它们已经在devDependencies中声明了。