node在升级到8.0之后,会顺带的把NPM升级到5.0,升级之后的效果亮瞎双眼。
1、npm install xxx安装模块时,不再需要添加--save选项,并且会自动将模块依赖信息保存到 package.json 文件;
2、安装模块操作之后,package.json同级(改变 node_modules 文件夹内容)会生成或更新 package-lock.json 文件;
3、发布的模块不会包含 package-lock.json 文件
4、手动更新 package.json 文件中已有模块的版本,直接执行npm install不会安装新指定的版本,只能通过npm install xxx@yy更新;
5、安装时间大幅提升,是因为 package-lock.json 文件中已经记录了整个 node_modules 文件夹的树状结构,甚至连模块的下载地址都记录了,再重新安装的时候只需要直接下载文件即可(这样看起来 facebook 的 yarn 好像没有啥优势了)。
package-lock.json是什么?
根据官方文档,这个package-lock.json 是在 npm install时候生成一份文件,用以记录当前状态下实际安装的各个npm package的具体来源和版本号。
它有什么用呢?因为npm是一个用于管理package之间依赖关系的管理器,它允许开发者在pacakge.json中间标出自己项目对npm各库包的依赖。
package.json和package-lock.json的区别?
原来package.json文件只能锁定大版本,也就是版本号的第一位,并不能锁定后面的小版本,你每次npm install都是拉取的该大版本下的最新的版本,为了稳定性考虑我们几乎是不敢随意升级依赖包的,这将导致多出来很多工作量,测试/适配等,所以package-lock.json文件出来了,当你每次安装一个依赖的时候就锁定在你安装的这个版本。
npm升级带来的坑
(1)、npm升级后带来了一个很大的坑:以后直接改 package.json 文件相应模块的版本号,再执行npm install不会更新了,你只能手动用npm install xxx@yy指定版本号来安装,然后它会自动更新 package-lock.json 文件。
(2)、直接执行npm install时,如果不存在 package-lock.json 文件,它会根据安装模块后的 node_modules 目录结构来创建;如果已经存在 package-lock.json 文件,则它只会根据 package-lock.json 文件指定的结构来下载模块,并不会理会 package.json 文件。
分享我前段时间遇到的一个小问题,首先上几张图,我在开发使用element-ui时,对我的element-ui版本进行升级,使用淘宝镜像,cnpm install element-ui@2.5.4进行版本升级,发现然并卵,package.json和package-lock.jsn,版本都没有变,
黑人问号???what the fuck ???###



接下来,我改变思路,使用npm install element-ui@2.5.4做尝试,成功了,这原因让人琢磨不透。npm 和 cpnm 同父异母的兄弟,居然不一样,如果有小伙伴知道其中的原因,可以告诉我。
谢谢大家!


