在安装纱线包装时,“未满足的同行依赖”是什么意思?

我有一个新安装的 yarn(通过 npm install yarn -g) ,并试图安装一些包与

纱线添加 vue-loader bel-loader 样式加载器 css-loader 文件加载器 webpack

然后在安装过程中收到一些警告,例如

警告“ vue-loader@13.3.0”具有未满足的对等依赖关系“ vue-template-Editor@^ 2.0.0”。

同一主题的 姐妹问题(大约 npm)产生了一些答案,这些答案表明

  1. 更新 npm
  2. 删除 node_modules,因为在 npm中有一个关于处理依赖关系的 bug。

我不能丢弃警告中的包,因为 webpack构建失败,这导致我不得不手动安装它们。同时,安装了相当多的依赖项,所以我不明白为什么没有安装这些。

上面的警告是什么意思,为什么 yarn不自己安装这些依赖项?

69034 次浏览

什么是对等依赖

这里 是关于依赖类型的一些有用的阅读资料,给你是关于对等依赖的信息,但是总结一下:

Dependency: A library/package your project needs to run.
对等依赖 : 用于指示项目将挂钩到的库/包。

软件包 vue-loadervue-template-compiler有一个对等依赖关系-vue-loader充当 vue-template-compiler的插件

Why aren't peer dependencies installed by default

对等依赖关系被自动安装到 Npm@3(纱线已经跟进)。由于经常出现混淆的行为,这个过程被停止了。例如,安装另一个需求冲突的插件会导致错误。

我们还将在 npm@3中更改对等依赖关系的行为。我们不会再自动下载对等依赖项了。相反,如果对等依赖关系尚未安装,我们将提醒您。这需要您自己手动解决 peerDependency 冲突,但是从长远来看,这将使您不太可能因为包的依赖关系而陷入困境。[2015年2月13日]

更新

按照 给你 npm@7现在安装对等依赖项。
要了解这个决定背后的动机,请参阅这里的“一个 href =”https://github.com/npm/rfcs/blob/update/實现/0025-install-peer-deps.md”rel = “ noReferrer”>

Running yarn install --check-files or just yarn install can fix the issue and install the missing depecendencies.

显式地添加到您的 package.json也可能是一个选项。

参考资料 https://github.com/yarnpkg/yarn/issues/4594#issuecomment-763475899

正如其他人所提到的,对等依赖项是库所需的其他包,必须添加到 家长套餐的依赖项中,而不是直接在库中。

要解决这个警告,您应该为每个被投诉的 <package>运行 yarn add <package>

yarn install的原始输出:

$ yarn install
yarn install v1.22.15
[1/4] Resolving packages...
[2/4] Fetching packages...
info fsevents@2.3.2: The platform "linux" is incompatible with this module.
info "fsevents@2.3.2" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
warning " > react-markdown@8.0.3" has unmet peer dependency "@types/react@>=16".
warning "react-scripts > eslint-config-react-app > eslint-plugin-flowtype@8.0.3" has unmet peer dependency "@babel/plugin-syntax-flow@^7.14.5".
warning "react-scripts > eslint-config-react-app > eslint-plugin-flowtype@8.0.3" has unmet peer dependency "@babel/plugin-transform-react-jsx@^7.14.9".
warning "react-scripts > react-dev-utils > fork-ts-checker-webpack-plugin@6.5.2" has unmet peer dependency "typescript@>= 2.7".
warning "react-scripts > eslint-config-react-app > @typescript-eslint/eslint-plugin > tsutils@3.21.0" has unmet peer dependency "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta".
[4/4] Building fresh packages...
Done in 8.91s.

解析警告的命令:

yarn add '@types/react@>=16' '@babel/plugin-syntax-flow@^7.14.5' '@babel/plugin-transform-react-jsx@^7.14.9' 'typescript@>= 2.7' '@babel/core@^7.0.0-0' 'typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'

现在可以运行 rm -rf node_modules/ && yarn来测试输出是否是干净的:

$ yarn
yarn install v1.22.15
[1/4] Resolving packages...
[2/4] Fetching packages...
info fsevents@2.3.2: The platform "linux" is incompatible with this module.
info "fsevents@2.3.2" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
[4/4] Building fresh packages...
success Saved lockfile.
Done in 9.05s.

请注意,如果新添加的依赖项具有任何对等依赖项,则必须重复此过程。