为了探究npm、yarn、cnpm等nodejs包管理器的工作原理,我做了一个测试。
我发现了两个包:jquery-dreamstream和jquery.tree,它们都只依赖于jquery,没有其他依赖项。 jquery-dreamstream 依赖于 jquery@^2.1.1 jquery.tree依赖于jquery@~2.1.1
我在终端上运行此命令:
npm i jquery-dreamstream jquery.tree -S
它在/node_modules 中下载三个包:
- [email protected]
- jquery-dreamstream
- jquery.tree
在jquery.tree中,有一个node_modules目录,其中包含[email protected]
所以那就是:
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3953484c5c4b40790b170b170d" rel="noreferrer noopener nofollow">[email protected]</a>
jquery-dreamstream
jquery.tree:{
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="fd978c88988f84bdcfd3ccd3c9" rel="noreferrer noopener nofollow">[email protected]</a>
}
事实上它下载了 4 个包。
这个结果让我很困惑。
为什么 npm 下载两个版本的 jquery?
为什么npm不只下载[email protected] ?我认为这个版本可以同时被jquery-dreamstream和jquery.tree使用,因为2.1.4同时满足^2.1.1和~2.1.1
最佳答案
因为jquery.tree
在其package.json
中将"jquery": "~2.1.1"
列为依赖项
。这将仅安装该软件包的版本。如果它已列在 jquery.tree
的 peerDependency
中,那么您所期望的行为(安装一个满足所有要求的版本)就会出现。在这种情况下,您需要将 jquery
添加到您自己的依赖项
,以便您可以决定版本。使用对等依赖关系目前被认为是最佳实践,尽管 jquery.tree
已经有 5 年历史了,因此可能由于其年龄不符合这一点。
关于javascript - 为什么npm或yarn下载两个版本的jquery?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56231164/