javascript - 为什么npm或yarn下载两个版本的jquery?

标签 javascript node.js npm yarnpkg

为了探究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目录,其中包含[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.treepeerDependency 中,那么您所期望的行为(安装一个满足所有要求的版本)就会出现。在这种情况下,您需要将 jquery 添加到您自己的依赖项,以便您可以决定版本。使用对等依赖关系目前被认为是最佳实践,尽管 jquery.tree 已经有 5 年历史了,因此可能由于其年龄不符合这一点。

关于javascript - 为什么npm或yarn下载两个版本的jquery?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56231164/

相关文章:

javascript - 在附加选择字段上使用 select2 时超出最大调用堆栈大小

javascript - 如何在实例方法中更新 Mongoose 子文档?

node.js - 使用 sails.js 和 postgreSQL 时出错(使用 sails-postgresql 模块)

node.js - npm 链接导致 javascript 语法错误

javascript - 找不到模块 : Error: Can't resolve 'crypto' and Cant resolve 'fs'

reactjs - 在 react-pdf 中显示 pdf 时出错

javascript - 如何隐藏/编码书签中的 JavaScript 代码?

javascript - 带有 express 的 socket.io 更新 DOM 中的变量

node.js - Express (node.js) 似乎正在用 application/json 替换我的内容类型

javascript - 调用存储在 Typescript 变量中的方法