yarn 、npm 、 npx 、 cnpm 、 pnpm等包管理工具及其差异,依赖包版本锁定问题

22,689次阅读
没有评论

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

前言

依赖版本锁定,package-lock.jsonyarn.lock 的重要性。

推荐使用 yarnyarn.lock 进行开发

npm、cnpm

cnpm不支持 依赖 版本锁定 ,可能导致 不同环境 下安装的包版本 不一致 ,从而引发代码兼容性 问题 。建议 避免 使用 cnpm, 并推荐通过手动更换 npm 源或使用 yarn 工具等,来提高安装速度同时确保版本一致性。

cnpm 的版本锁定问题的解决方案 `

如果你之前 用 npm 安装 产生 package-lock.json后面 的人用 cnpm安装 你的 package.json、package-lock.json 安装可能会跟你安装的 依赖包不一致 ,这是因为cnpm 不受 package-lock.json 影响 只会 根据 package.json 进行 下载

(注意 ) 有时候多人开发会使用 npm cnpm, 从而出现上面的问题 影响项目运行甚至是污染项目码

首先了解下 npm 包管理及依赖版本管理的原理。这些都是通过 package.json 文件实现的 当你使用 npm 安装一个包 (并保存它) 或者更新一个包的时候,package.json 里就自动添加了一条信息,包括包名和其版本。npm 默认安装最新版本,然后在其版本号之前添加一个符号。比如 1.2.12,它表明最低应使用 1.2.12 版本。并且在这之上,拥有相同大版本号的任何版本都是 OK 的。毕竟小版本和 bugfix 版本不会对使用造成任何影响,所以用任何相同大版本的更高级版本都很安全。

符号 ^:表示主版本固定的情况下,可更新最新版。例如:vuex:“^3.1.3”,3.1.3 及其以上的 3.x.x 都是满足的。
符号~:表示次版本固定的情况下,可更新最新版。如:vuex:“~3.1.3”,3.1.3 及其以上的 3.1.x 都是满足的。
无符号:无符号表示固定版本号,例如:vuex:“3.1.3”,此时一定是安装 3.1.3 版本。

出现情况:
平常使用可能没有问题,但当一段时间后重新 克隆项目 ,安装依赖包(如果有最新版依赖)会安装 最新版本 ,导致项目出现bug
理论上这个问题是 不应该 出现的,因为 npm 作为开源世界的一部分,也遵循一个发布原则:相同大版本号下的新版本 应该兼容旧版本 。即 2.1.0 升级到 2.2.0 时 AP I 不应该 发生变化。但很多开源库的开发者并 没有严格遵守 这个发布原则,导致了上面的这个问题。
为了在不同的环境下生成相同的 node_modules,引入版本依赖锁定就尤为必要了.
生成 package-lock.json:

package-lock.json 文件

1、生成 当你 首次运行 npm install 时,npm 会 自动生成 package-lock.json 文件。
yarn、npm、npx、cnpm、pnpm 等包管理工具及其差异,依赖包版本锁定问题
需要使用cnpm 创建 package-lock.json 文件(不可与 npm 创建 混用):

yarn、npm、npx、cnpm、pnpm 等包管理工具及其差异,依赖包版本锁定问题
2、更新 package-lock.json:

当你更新依赖版本或添加新的依赖时,可以使用以下命令更新 package-lock.json 文件。

npm install --save lodash@4.17.21

或者直接更新 package.json 中的依赖版本,然后重新运行 npm install。
3、删除 package-lock.json:
如果你需要完全清除 package-lock.json 文件,可以使用以下命令。

rm -rf package-lock.json
npm cache clean --force
npm install

使用 package-lock.json 的注意事项

1、提交到版本控制系统:

  • 将 package-lock.json 文件提交到版本控制系统,以便团队成员可以使用相同的依赖版本。
    2、避免频繁更新:
  • 不要频繁更新 package-lock.json 文件,除非确实需要更新依赖版本。
    3、解决冲突:
  • 如果遇到依赖冲突或版本问题,可以尝试重新生成 package-lock.json 文件。
    通过合理使用 package-lock.json 文件,你可以确保项目的依赖关系稳定可靠,从而提高开发效率和项目质量。

yarn(锁定文件版本)

yarn 环境配置(自己的)
yarn 是一个快速、可靠、且安全的依赖管理工具,旨在改进 npm 的体验。Yarn 为 JavaScript 项目提供了一个强大的解决方案,用于解决依赖管理中的常见问题,如安装速度慢、依赖不一致性和安全性。Yarn 支持离线模式、锁定文件、并行安装、缓存机制等功能,提高了开发效率和项目维护的便捷性。
1、安装
Yarn 可以通过多种方式安装,以下是几种常见的安装方法:

  • npm 安装(适用于已安装 Node.js 的环境):
    npm install -g yarn
    如果使用不了,看看环境配置有没有问题
  • 直接下载安装脚本:从 Yarn 官网获取安装脚本,适用于多种操作系统

2、yarn 与 npm 的区别

  • 安装速度与性能:Yarn 的安装速度通常比 npm 快。
    – Yarn 在安装包时会先从本地缓存中寻找,如果本地没有找到,才会去下载,而 npm 则是直接从远程源下载。
    – Yarn 在性能上优于 npm。Yarn 使用并行安装,可以加快安装速度;而 npm 则是串行安装,速度较慢。
  • 安装版本:Yarn 和 npm 在安装版本上有所不同。Yarn 安装的包版本可以在 yarn.lock 文件中明确指定,这保证了在不同的开发环境中使用相同的版本。而 npm 则倾向于安装最新的版本。
  • 包的管理:Yarn 和 npm 在管理包的方式上存在差异。Yarn 使用 yarn.lock 文件管理包的版本,这保证了在不同的开发环境中使用 相同的版本;而 npm 则依赖于 package-lock.json 文件来锁定依赖项版本。
  • 依赖管理:Yarn 在管理包依赖关系时比 npm 更严格。Yarn 可以管理多个包之间的依赖关系,而 npm 则不能。
    yarn、npm、npx、cnpm、pnpm 等包管理工具及其差异,依赖包版本锁定问题
    在这里插入图片描述

pnpm(锁定文件版本)

pnpm 是一个相对较新的包管理器,它的主要目标是提高性能和减少磁盘空间占用。pnpm 使用 pnpm-lock.yaml 文件来锁定依赖 的具体版本,这与 yarn 非常相似。
优点
磁盘空间优化 :pnpm 使用了一种称为“symlink”的技术,将所有依赖项存储在一个共享的位置,而不是为每个项目单独安装。这可以大大减少磁盘空间的占用。
安装速度 :pnpm 的安装速度相对较快,尤其是在处理大型项目时。这有助于提高开发者的生产力。
严格的依赖管理 :pnpm 严格遵循依赖关系,这有助于避免在项目中意外地引入未在 package.json 中声明的依赖项。这有助于提高项目的可维护性。
缺点
社区支持 :pnpm 是一个相对较新的包管理器,其社区支持和可用包相对较少。
兼容性问题:由于 pnpm 使用 symlink 技术,可能会导致某些工具或库在处理依赖关系时出现兼容性问题。
在这里插入图片描述

原文地址: yarn、npm、npx、cnpm、pnpm 等包管理工具及其差异,依赖包版本锁定问题

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