概述
关于package-lock.json的解释
npm官方文档: http://caibaojian.com/npm/files/package.json.html
Node.js v8.0 后,自带的 npm 也升级到了5.0的确带来了不少便利,大概讲一下 npm 5 的一些大的变化:
- 使用npm install xxx命令安装模块时,不再需要–save选项,会自动将模块依赖信息保存到 package.json 文件;
- 安装模块操作(改变 node_modules 文件夹内容)会生成或更新 package-lock.json 文件;
- 发布的模块不会包含 package-lock.json 文件;
- 如果手动修改了 package.json 文件中已有模块的版本,直接执行npm install不会安装新指定的版本,只能通过npm install xxx@yy更新
重新安装模块之所以快,是因为 package-lock.json 文件中已经记录了整个 node_modules 文件夹的树状结构,甚至连模块的下载地址都记录了,再重新安装的时候只需要直接下载文件即可(这样看起来 facebook 的 yarn 好像没有啥优势了);
package-lock.json文件的产生:
- package.json文件下载到的依赖包可能在不同的情况下,各库包的版本语义可能并不相同,有的库包开发者并不严格遵守这一原则:相同大版本号的同一个库包,其接口符合兼容要求。
- 产生问题:在不同时间或者不同npm下载源之下,下载的各依赖包版本可能有所不同,因此其依赖库包行为特征也不同,有时候甚至完全不兼容。
- npm5开始提供自动生成package-lock.json文件的功能,为的是让开发者知道只要你保存了源文件,到一个新的机器上、或者新的下载源,只要按照这个package-lock.json文件所标识的具体版本下载依赖库包,就能确保所有库包与上次的安装完全一样;
- npm的下载源改为私服地址,这样产生的package-lock.json文件的版本号是这个私服上设置好的版本号
以下是 package-lock.json 文件的例子:
package-lock.json
是当 node_modules 或 package.json发生变化时自动生成的文件。这个文件主要功能是确定当前安装的包的依赖,以便后续重新安装的时候生成相同的依赖,而忽略项目开发过程中有些依赖已经发生的更新
{
"name": "test_pkg_lock",
"version": "1.0.0",
"lockfileVersion": 1,
"dependencies": {
"commander": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
"integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q="
},
"cssfilter": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.8.tgz",
"integrity": "sha1-ZWTKzLqKdt2bS5IGaLn7f9pQ5Uw="
},
"graceful-readlink": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
"integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="
},
"xss": {
"version": "0.2.18",
"resolved": "https://registry.npmjs.org/xss/-/xss-0.2.18.tgz",
"integrity": "sha1-bfX7XKKL3FHnhiT/Y/GeE+vXO6s="
}
}}
带来速度的同时,npm 也挖了个大大的坑:
以后直接改 package.json 文件相应模块的版本号,再执行npm install不会更新了(好可怕),你只能手动用npm install xxx@yy指定版本号来安装,然后它会自动更新 package-lock.json 文件。直接执行npm install时,如果不存在 package-lock.json 文件,它会根据安装模块后的 node_modules 目录结构来创建;如果已经存在 package-lock.json 文件,则它只会根据 package-lock.json 文件指定的结构来下载模块,并不会理会 package.json 文件
网上已经有很多人反应这个问题了:
GitHub 上的 issue:package-lock.json file not updated after package.json file is changed
链接:https://github.com/npm/npm/issues/16866
clean project with some deps in package.json.you run npm imodules are
installed and package-lock.json file is created.say you update module
A in package.json file.you run npm i. I would expect this updates the
package-lock.json file but it doesn’t. which results in module A not
being updated.
文章:
Understanding lock files in NPM 5链接:http://jpospisil.com/2017/06/02/understanding-lock-files-in-npm-5.html
最后
以上就是背后茉莉为你收集整理的【小知识】关于package-lock.json的详细解释的全部内容,希望文章能够帮你解决【小知识】关于package-lock.json的详细解释所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复