1
2
3
4
5
6
7
8
9
10
11
12
13
<br>1、package.json 文件里记录有项目所安装的依赖项,当 node_modules 被删除时,可以再根据该文件安装所需的依赖项;
 
2、npm 5 以前不会有 package-lock.json 这个文件,npm5 之后才加入这个文件;
 
3、当安装包的时候,npm 都会生成或者更新  package-lock.json 这个文件;
 
4、npm 5 之后的版本安装包的时候不需要加 --save 参数,它会自动保存依赖的信息;
 
5、当安装包的时候,会自动创建或者更新 package-lock.json 文件;
 
6、package-lock.json 文件会保存 node_modules 中所有包的信息(版本、下载地址),重新 npm install 的时候速度会提升;
 
7、文件的名称有 lock ,表示该文件可以用来锁定版本号,防止自动升级新版。

package-lock.json的作用就是锁定安装时的版本号并上传到git上,保证其他人在npm install时下载的依赖都保持一直。

根据官方文档,这个package-lock.json 是在 npm install时候生成一份文件,用以记录当前状态下实际安装的各个npm package的具体来源和版本号。

为什么要有这个文件呢?
npm是一个管理package之间依赖关系的管理器,它允许开发者在package.json里标出自己项目对npm各库包的依赖,如

"dependencies": {
"@types/node": "^8.0.33",
},
^表示向后(新)兼容依赖,上面已经指出,所以实际npm i 下载下来版本可能是8.0.35.

大多数情况这种向新兼容依赖下载最新库包的时候都没有问题,可是因为npm是开源世界,各库包的版本语义可能并不相同,有的库包开发者并不遵守严格这一原则:相同大版本号的同一个库包,其接口符合兼容要求。这时候用户就很头疼了:在完全相同的一个nodejs的代码库,在不同时间或者不同npm下载源之下,下到的各依赖库包版本可能有所不同,因此其依赖库包行为特征也不同有时候甚至完全不兼容。

因此npm最新的版本就开始提供自动生成package-lock.json功能,为的是让开发者知道只要你保存了源文件,到一个新的机器上、或者新的下载源,只要按照这个package-lock.json所标示的具体版本下载依赖库包,就能确保所有库包与你上次安装的完全一样。

总结一下就是,package.json文件只能锁定大版本,也就是版本号的第一位,并不能锁定后面的小版本,你每次npm install都是拉取的该大版本下的最新的版本,为了稳定性考虑我们几乎是不敢随意升级依赖包的,这将导致多出来很多工作量,测试/适配等,所以package-lock.json文件出来了,当你每次安装一个依赖的时候就锁定在你安装的这个版本。

安装时包有bug怎么办?
不能直接去package.json里改,然后再npm install,(据知乎网友测试,这时候package-lock.json文件也会更新为修改的版本号,但是npm install安装到node_modules里的依赖并不是手改的版本。。所以还是不要手改了。)
只能通过 npm install xxx(更新小版本)或者npm install xxx@xxx(指定版本号)来更新依赖,然后package-lock.json随之更新。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package.json文件里的各种版本符号
version
必须匹配某个版本
 
^version
 
//^此符号表示向后兼容新版本,会把当前库的版本更新到第一位数(不是0的第一位)的最新版本;
//如第一个,会更新到4.X.X,也就是>=4.1.4 < 5.0.0;
 
"webpack-merge": "^4.1.4"//>=4.1.4 < 5.0.0
"shelljs": "^0.8.2"//>=0.8.2 <0.9.0
 
~version
他会更新到当前minor version(中间那位数)中的最新版本。
 
~1.15.2    >=1.15.2  <1.16.0
 
>=version
大于或等于某版本

  

posted on   ygunoil  阅读(1789)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示