首页 > 解决方案 > 为什么npm或者yarn下载两个版本的jquery?

问题描述

为了探索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 中下载三个包:

在 jquery.tree 中,有一个 node_modules 目录,其中包含 jquery@2.1.4

那就是:

jquery@2.2.4
jquery-dreamstream
jquery.tree:{
    jquery@2.1.4
}

事实上它下载了4个包。

这个结果让我很困惑。

为什么npm会下载两个版本的jquery?

为什么npm不只下载jquery@2.1.4?我觉得这个版本可以同时被jquery-dreamstream和jquery.tree使用,因为2.1.4同时满足^2.1.1和~2.1.1

标签: javascriptnode.jsnpmyarnpkg

解决方案


因为jquery.tree"jquery": "~2.1.1"package.json列为dependency. 这将只安装此软件包的版本。如果它已peerDependenciesjquery.tree. 在这种情况下,您需要添加jquery到您自己的dependencies,以便您可以决定版本。使用对等依赖项目前被认为是最佳实践,尽管jquery.tree它已有 5 年的历史,因此可能由于它的年龄不符合这一点。


推荐阅读