共计 2729 个字符,预计需要花费 7 分钟才能阅读完成。
前言
依赖版本锁定,
package-lock.json
或yarn.lock
的重要性。
推荐使用 yarn
、yarn.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 文件。
需要使用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 技术,可能会导致某些工具或库在处理依赖关系时出现兼容性问题。
原文地址: yarn、npm、npx、cnpm、pnpm 等包管理工具及其差异,依赖包版本锁定问题