主流包管理工具npm、yarn、cnpm、pnpm之间的区别与联系——原理篇

10,710次阅读
没有评论

共计 779 个字符,预计需要花费 2 分钟才能阅读完成。

}

解析,

  • ^字符,告诉 npm,安装主版本等于 4 的任意一个版本即可

  • 现在运行 npm 进行安装,npm 将安装 lodash 的主版本为 4 的最新版,可能 是 lodash@4.25.5(@是 npm 约定用来确定包名的指定版本的)

  • 理论上,次版本号的变化并不会影响向后兼容性。因此,安装最新版的依赖库应该是能正常工作的,而且能引入自 4.17.4 版本以后的重要错误和安全方面的修复。

  • 但是,即使不同的开发人员使用了相同的 package.json 文件,在他们自己的机器上也可能会安装同一个库的不同种版本,这样就会存在潜在的难以调试的错误和“在我的电脑上…”的情形。

大多数 npm 库都严重依赖于其他 npm 库,这会导致 嵌套依赖 关系,并增加无法匹配相应版本的几率。

虽然可以通过 npm config set save-exact true 命令关闭在版本号前面使用 ^ 的默认行为,但这个 只会影响顶级依赖关系 。由于每个依赖的库都有自己的package.json 文件,而在它们自己的依赖关系前面可能会有 ^ 符号,所以无法通过 package.json 文件为嵌套依赖的内容提供保证。

为了解决这个问题,npm 提供了 shrinkwrap 命令。此命令将生成一个 npm-shrinkwrap.json 文件,为所有库和所有嵌套依赖的库记录确切的版本。

然而,即使存在 npm-shrinkwrap.json 这个文件,npm 也只会锁定库的版本,而不是库的内容。即便 npm 现在也能阻止用户多次重复发布库的同一版本,但是 npm 管理员仍然具有强制更新某些库的权力。

这是引用自 shrinkwrap 文档的内容:

如果你希望锁定包中的特定字节,比如是为了保证能正确地重新部署或构建,那么你应该在源代码控制中检查依赖关系,或者采取一些其他的机制来校验内容,而不是靠校验

原文地址: 主流包管理工具 npm、yarn、cnpm、pnpm 之间的区别与联系——原理篇

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-09-28发表,共计779字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)