用 yarn 安装包时 'has unmet peer dependency' 是什么意思?

What does 'has unmet peer dependency' mean when installing a package with yarn?

我全新安装了 yarn(通过 npm install yarn -g)并尝试使用

安装一些软件包

yarn add vue-loader babel-loader style-loader css-loader file-loader webpack

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

warning "vue-loader@13.3.0" has unmet peer dependency "vue-template-compiler@^2.0.0".

关于同一主题的 sister question(大约 npm)给出了一些建议

  1. 更新npm
  2. 删除 node_modules,因为 npm 中存在有关处理依赖项的错误。

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

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

什么是对等依赖

Here is some useful reading on dependency types, and here 是关于对等依赖的信息,但总结一下:

Dependency: library/package 你的项目需要 运行.
对等依赖:用于指示library/package您的项目将挂钩。

vue-loadervue-template-compiler 有对等依赖 - vue-loader 作为 vue-template-compiler

的插件

为什么没有默认安装对等依赖项

对等依赖项会自动安装到 npm@3(其中 yarn 已跟进)。由于经常出现令人困惑的行为,这已停止。例如,安装另一个具有冲突要求的插件会导致错误。

We will also be changing the behavior of peerDependencies in npm@3. We won’t be automatically downloading the peer dependency anymore. Instead, we’ll warn you if the peer dependency isn’t already installed. This requires you to resolve peerDependency conflicts yourself, manually, but in the long run this should make it less likely that you’ll end up in a tricky spot with your packages’ dependencies. [Feb 13, 2015]

更新

根据 here npm@7 现在安装对等依赖项。
有关此决定背后的动机,请参阅 here

运行 yarn install --check-filesyarn install 可以解决问题并安装缺少的依赖项。

明确添加到您的 package.json 也可能是一种选择。

引用https://github.com/yarnpkg/yarn/issues/4594#issuecomment-763475899