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

前言

依赖版本锁定,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时API不应该发生变化。但很多开源库的开发者并没有严格遵守这个发布原则,导致了上面的这个问题。
为了在不同的环境下生成相同的node_modules,引入版本依赖锁定就尤为必要了.
生成 package-lock.json:

package-lock.json文件

1、生成 当你首次运行 npm install 时,npm 会自动生成 package-lock.json 文件。
在这里插入图片描述
需要使用cnpm创建package-lock.json文件(不可与npm 创建 混用):

在这里插入图片描述
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则不能。
    在这里插入图片描述
    在这里插入图片描述

pnpm(锁定文件版本)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值