一、从package.json说起
什么是 package.json
简单地说:就是管理 npm
包的文件,包含了项目所依赖的 npm
包、项目的配置信息。
创建方式:npm init
按照系统提示填写相关信息即可(回车设置为空)。
具体配置说明,详见 package.json
字段全解
二、npm 5.0 的变化
升级了 Node.js v8.0
后,自带的 npm 也升级到了 5.0,那么 npm5 有什么变化呢?
使用 npm install xxx
命令安装模块时,不再需要 –save
选项,会自动将模块依赖信息保存到 package.json
文件;
安装模块操作(改变 node_modules
文件夹内容)会生成或更新 package-lock.json
文件
发布的模块不会包含 package-lock.json
文件
如果手动修改了 package.json
文件中已有模块的版本,直接执行 npm install
不会安装新指定的版本,只能通过 npm install name@version
更新
三、package-lock.json 的含义 & npm5 的坑
我们先来看一段官方解释
package-lock.json is automatically generated for any operations where npm modifies either the node_modules tree, or package.json. It describes the exact tree that was generated, such that subsequent installs are able to generate identical trees, regardless of intermediate dependency updates.
大致意思:package-lock.json
是当 node_modules
或 package.json
发生变化时自动生成的文件。它记录了整个 node_modules
文件夹的树状结构,甚至连模块的下载地址都记录了,重新安装时只需下载文件即可。因此重装模块速度非常快。
然而,npm5.0
在提升速度的同时也挖了一个大大的坑:
以后修改 package.json
文件相应模块的版本号,再执行 npm install
不会更新了,只能手动 npm install name@version
指定版本号来安装。
然后它会自动更新 package-lock.json
文件。
直接执行 npm install
时,如果不存在 package-lock.json
文件,它会根据安装模块后的 node_modules
目录结构来创建;
如果已经存在 package-lock.json
文件,则它只会根据 package-lock.json
文件指定的结构来下载模块,并不会理会 package.json
文件。
目前 GitHub 上已有相关 issue 了:https://github.com/npm/npm/is…
【参考文档】
https://docs.npmjs.com/files/…
http://blog.csdn.net/zmrdlb/a…
http://blog.csdn.net/aaa333qw…
https://docs.npmjs.com/files/…