前言
依赖版本锁定,
package-lock.json
或yarn.lock
的重要性。
推荐使用yarn
、yarn.lock
进行开发
npm、 cnpm
cnpm不支持
依赖版本锁定
,可能导致不同环境
下安装的包版本不一致
,从而引发代码兼容性问题
。建议避免
使用cnpm,并推荐通过手动更换npm源或使用yarn工具等,来提高安装速度同时确保版本一致性。
如果你之前
用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 技术,可能会导致某些工具或库在处理依赖关系时出现兼容性问题。