安装带有纱线的软件包时,“未满足对等依赖性”是啥意思?

Posted

技术标签:

【中文标题】安装带有纱线的软件包时,“未满足对等依赖性”是啥意思?【英文标题】:What does 'has unmet peer dependency' mean when installing a package with yarn?安装带有纱线的软件包时,“未满足对等依赖性”是什么意思? 【发布时间】:2018-04-06 07:19:57 【问题描述】:

我全新安装了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".

这究竟是什么意思,特别是:为什么yarn 不自行安装这些依赖项?(如果需要)

关于同一主题的sister question(关于npm)会产生一些答案,建议i)更新npm ii)删除node_modules,因为npm 中有一个关于处理依赖关系的错误。

yarn 中此类警告的状态如何? 这真的是一个警告(= 我可以丢弃的东西)吗? 我不能丢弃它们(webpack 构建失败)并且必须手动安装它们。同时,安装了很多依赖项,所以我不明白为什么错过了一些(虽然它们可以手动安装)

【问题讨论】:

我不是母语人士,我刚刚在笔记本电脑上观察到“X has unmet peer dependency Y”消息。在我用谷歌搜索这个 SO 问题之前,我认为这句话的意思是“[安装] X 导致 Y 的依赖关系不被满足”,而它们的意思是“X 有未满足的对等依赖关系......” 可能重复:***.com/questions/42361942/… 【参考方案1】:

什么是对等依赖

Here 是关于依赖类型的一些有用的读物​​,here 是关于对等依赖的信息,但总结一下:

依赖性:您的项目需要运行的库/包。对等依赖性:用于指示您的项目将挂钩的库/包。

vue-loadervue-template-compiler 有对等依赖 - vue-loader 充当vue-template-compiler 的插件

为什么不默认安装

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

我们还将改变 npm@3 中 peerDependencies 的行为。我们将不再自动下载对等依赖项。相反,如果尚未安装对等依赖项,我们会警告您。这需要您自己手动解决 peerDependency 冲突,但从长远来看,这应该会降低您最终遇到包依赖项的棘手问题的可能性。 [2015 年 2 月 13 日]

更新

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

【讨论】:

这只是一个警告,但通常如果不满足依赖项,执行将失败。那么为什么似乎可以忽略这个警告呢? 我该怎么办?我正在使用纱线。我应该忽略这个还是手动安装?您只提到了 npm 的更新,而不是关于 yarn。问题是关于纱线的。 与纱线无关!问题是纱线而不是 npm。 @JeanPaul 2 个可能的原因。首先,如果对等依赖项是可选的。其次,如果对等依赖项是其他已安装包的依赖项,但未在 package.json 中列出,即使包可用,您仍会看到警告。【参考方案2】:

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

也可以选择明确添加到您的package.json

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

【讨论】:

以上是关于安装带有纱线的软件包时,“未满足对等依赖性”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

mybatis po对象是啥意

纱线中最接近“npm ci”的是啥

the hash for the file is not present in the specified catalog file,是啥意

自制升级纱线安装节点,而我已经在使用 nvm

锁文件解释,每一行到底是啥意思?纱线锁

找不到使用纱线安装的软件包中的命令?