javascript - 为什么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@2.2.4
- jquery-dreamstream
- jQuery.tree
在 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
解决方案
因为jquery.tree
将"jquery": "~2.1.1"
其package.json
列为dependency
. 这将只安装此软件包的版本。如果它已peerDependencies
在jquery.tree
. 在这种情况下,您需要添加jquery
到您自己的dependencies
,以便您可以决定版本。使用对等依赖项目前被认为是最佳实践,尽管jquery.tree
它已有 5 年的历史,因此可能由于它的年龄不符合这一点。
推荐阅读
- python - LinkedIn帖子抓取python
- r - 根据主题编号将一个数据帧中的值分配给另一个数据帧
- python - 加载预训练的 BERT 模型问题
- python - ModuleNotFoundError:没有名为“飞镖”的模块
- python - Regular expression to extract software version from the given text?
- ios - 与 iOS 日历 API 集成
- php - PHP:如何列出值不同的两个多维数组的键?
- sql - 特殊标准的记录数
- perl - 如何在 PERL 中使用 Getopt::Long 删除特定目录
- mergesort - 合并排序的辅助内存?