码迷,mamicode.com
首页 > Web开发 > 详细

03-package-lock.json的作用和意义

时间:2021-03-17 14:27:39      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:extern   模块名   file   稳定性   版本   pen   状态   意思   mod   

我们每次,去npm install xxx会把内容记录到package.json文件中,下载的包都会发生变化,为了系统的稳定性考虑,每次执行完npm install之后会对应生成package-lock文件,该文件记录了上一次安装的具体的版本号。

根据官方文档,package-lock.json 是生成的系统当前安装的库的具体来源和版本号,锁定版本。

当你执行npm install的时候, node会先从package.json文件中读取所有dependencies信息,然后根据dependencies中的信息与node_modules中的模块进行对比,没有的直接下载,node是从package.json文件读取模块名称,从package-lock.json文件中获取版本号,然后进行下载或者更新。

当package.json与package-lock.json都不存在,执行"npm install"时,node会重新生成package-lock.json文件,然后把node_modules中的模块信息全部记入package-lock.json文件,但不会生成package.json文件。但是,你可以通过"npm init --yes"来生成package.json文件



**自npm 5.0版本发布以来,npm i的规则发生了三次变化。**

1、npm 5.0.x 版本,不管package.json怎么变,npm i 时都会根据lock文件下载

package-lock.json file not updated after package.json file is changed · Issue #16866 · npm/npm

这个 issue 控诉了这个问题,明明手动改了package.json,为啥不给我升级包!然后就导致了5.1.0的问题...

2、5.1.0版本后 npm install 会无视lock文件 去下载最新的npm

然后有人提了这个issue why is package-lock being ignored? · Issue #17979 · npm/npm

控诉这个问题,最后演变成5.4.2版本后的规则。

3、5.4.2版本后 why is package-lock being ignored? · Issue #17979 · npm/npm

大致意思是,如果改了package.json,且package.json和lock文件不同,那么执行`npm i`时npm会根据package中的版本号以及语义含义去下载最新的包,并更新至lock。

如果两者是同一状态,那么执行`npm i `都会根据lock下载,不会理会package实际包的版本是否有新。


 

总结:

package-lock.json文件是锁定当前项目依赖的小版本(具体哪个版本),及下载安装这个版本的源信息(如下载源),在node_modules中的对应关系,还有一个安装如果依赖了多个别的插件,也会把这种对应关系描述出来。当然了,我们压根也不会去看这些东西。

package.json是安装的当前大版本的最新版本,因为是^开头,但是package.json中不建议固定写死具体某个版本号,因为它可能还有还有别的依赖,别的版本也都是^,你的这次版本固定可能下次别人更新就不行了,所以锁定版本有我们的lock文件去做。

package.json中的某个,如果更新了(就是lock和package.json有差异了),那么lock里也会随着更新。但是lock里已经记录到了package.json中能正常运行项目的所有小版本依赖了,下次别人再npm i 安装依赖的时候,就会从lock锁定的这些信息中去安装项目依赖。

 

 

 

 

 

 

03-package-lock.json的作用和意义

标签:extern   模块名   file   稳定性   版本   pen   状态   意思   mod   

原文地址:https://www.cnblogs.com/haoqiyouyu/p/14542526.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!