Package.json 与 Package-lock.json

Package.json 与 Package-lock.json

记录一下, 关于npm install 时依赖包的生成与更新问题.
我的项目环境: 已搭建了vue-cli 脚手架, 版本 4.5.2

版本说明

很多软件发布时, 都会有一个版本, 例如: 上面提到的vue-cli脚手架, 版本是: 4.5.2
4 : 是主版本, 又称"大版本"
5 : 是次版本, 又称"小版本"
2 : 是修订版本号, 就是 4.5 的第几次修改
一般情况下, 当软件有里程碑式的更新(也就是很大的改动), 才会改动大版本
如果一次性新增/修改了不少文件或特性时, 会改动小版本
如果只是修改一些Bug, 小问题, 会改动修订版本号

在package.json文件中, 会出现以下3种版本号的写法:

  • ^ 开头的版本号
  • ~ 开头的版本号
  • 纯版本号, 没有特殊字符

符号 ^ : 代表支持当前版本 以及 更高的版本(向后兼容), 重点: 大版本号必须相同. 例如: 版本^4.5.2, 代表支持4.5.2, 也支持4.5.3、4.5.4、 4.6.4、 4.7.4、 4.9.9 等4.x.x, 但不支持 5.x.x 等更高的版本

符号~ : 代表支持当前版本 以及 更高的版本(向后兼容), 重点: 大版本号和小版本号必须相同. 例如: 版本~4.5.2, 代表支持 4.5.3、4.5.4、4.5.5 等4.5.x,但不支持 4.6.x4.7.x更不支持5.x.x 等更高的版本

纯版本号: 代表仅支持当前版本。例如: 版本4.5.2,代表仅支持4.5.2不支持4.5.34.5.4, 更不支持5.x.x 等更高的版本


两个文件的由来

运行命令npm init 会生成package.json。该文件是记录项目的依赖包名, 包版本等信息

运行命令npm install 会根据 package.json 的记录来安装依相应的依赖包,依赖包会被安装到目录node_modules
同时, 也会生成一个文件: package-lock.json, 该文件是记录锁定依赖包的版本, 包的来源等

记录

package.jsonpackage-lock.json 都具有记录依赖包名和版本的作用.
区别:

  • package.json 仅仅是记录自己的项目需要的直接依赖。
  • packge-lock.json 不仅是记录自己项目的直接依赖, 还记录了直接依赖的依赖.
    直接依赖的依赖: 有些项目的直接依赖包, 并不是独立的, 也是依赖于别人的包, 而这些别人的包不会记录在package.json, 但是会记录在package-lock.json中

锁定

例如: 程序员小A 从git上拉了一个项目, 并通过 npm install 生成安装 package.json上的包, 其中一个包的版本为^1.1.3, 当前生成的依赖包与项目代码完全兼容, 可以正常运行.

后来小A 花了几个月时间, 对该项目迭代升级, 添加了很多功能, 也能正常运行, 便将项目拷贝给了程序员小B. 注意,在这几个月期间1.1.3这个包, 官方进行了更新升级到了2.0.1, 但是小A 并没有更新.

小B 拿到这个项目后, 通过 npm install 生成安装 package.json上的包 (npm install 默认会安装最新版本的包), 此时报错了, 原因是 小B安装的是最新版的2.0.1的包, 而这个包恰巧不兼容小A迭代后的项目。

此时就出现了,在不同的时间, 安装的包与项目不兼容. 正是因此, 才推出了 package-lock.json 这个文件.

首先, package-lock.jsonnpm 5 版才出现的, 里面记录了包名, 版本, 包的来源等信息.
第一次运行命令npm install时, 根据package.json生成了node_modulespackage-lock.json
第二次 及 以后 运行命令npm install 时, 会自动判断 package.json 中包的大版本是否变化.
大版本没有变化, 则根据 package-lock.json 来安装生成包.
大版本发生变化, 则根据 package.json 来安装生成包, 并更新 package-lock.json文件
这就是package-lock.json 的锁定作用, 可以确保在不同时间, 不同环境(包来源) 都能保证包的一致性

好了, 这是我理解的package 和 package-lock. 如果有说错的地方, 可留言指正, 我们可以一起进步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值