简单谈谈关于 npm 5.0 的新坑


Posted in Javascript onJune 08, 2017

前言

前几天升级了 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 文件的例子:

{
 "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

这里是 npm 文档关于 package-locks 的说明

链接:https://docs.npmjs.com/files/package-locks

目前还不知道关于 package-lock.json 的最佳实践,果断切换回 Node v6.x,等别人把坑填了再上。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
Discuz! 6.1_jQuery兼容问题
Sep 23 Javascript
兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
Jul 14 Javascript
jquery.lazyload  实现图片延迟加载jquery插件
Feb 06 Javascript
javascript qq右下角滑出窗口 sheyMsg
Mar 21 Javascript
将查询条件的input、select清空
Jan 14 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
Aug 30 Javascript
JavaScript直播评论发弹幕切图功能点集合效果代码
Jun 26 Javascript
javascript中Date对象应用之简易日历实现
Jul 12 Javascript
微信小程序 侧滑删除(左滑删除)
May 23 Javascript
angular使用post、get向后台传参的问题实例
May 27 Javascript
JavaScript实现创建自定义对象的常用方式总结
Jul 09 Javascript
原生Js 实现的简单无缝滚动轮播图的示例代码
May 10 Javascript
微信小程序开发之toast提示插件使用示例
Jun 08 #Javascript
jquery实现放大镜简洁代码(推荐)
Jun 08 #jQuery
原生JS发送异步数据请求
Jun 08 #Javascript
vue2 自定义动态组件所遇到的问题
Jun 08 #Javascript
vue.js中过滤器的使用教程
Jun 08 #Javascript
了解VUE的render函数的使用
Jun 08 #Javascript
Node.js 使用命令行工具检查更新
Jun 08 #Javascript
You might like
PHP实现读取一个1G的文件大小
2013/08/24 PHP
在Win7 中为php扩展配置Xcache
2014/10/08 PHP
php源码 fsockopen获取网页内容实例详解
2016/09/24 PHP
php 使用curl模拟ip和来源进行访问的实现方法
2017/05/02 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
2020/01/23 PHP
jQuery实现的超酷苹果风格图标滑出菜单效果代码
2015/09/16 Javascript
Bootstrap每天必学之按钮(一)
2015/11/24 Javascript
原生javascript实现addClass,removeClass,hasClass函数
2016/02/25 Javascript
DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)
2016/11/09 Javascript
JavaScript实现图片懒加载(Lazyload)
2016/11/28 Javascript
微信小程序进行微信支付的步骤昂述
2016/12/01 Javascript
BOM之navigator对象和用户代理检测
2017/02/10 Javascript
Vue.js数据绑定之data属性
2017/07/07 Javascript
微信小程序上传图片功能(附后端代码)
2020/06/19 Javascript
微信小程序实现购物车代码实例详解
2019/08/29 Javascript
js计时事件实现圆形时钟
2020/03/25 Javascript
解决微信小程序scroll-view组件无横向滚动的问题
2020/02/04 Javascript
Python深入学习之上下文管理器
2014/08/31 Python
Python的函数的一些高阶特性
2015/04/27 Python
python解决网站的反爬虫策略总结
2016/10/26 Python
Python 实现淘宝秒杀的示例代码
2018/01/02 Python
numpy使用fromstring创建矩阵的实例
2018/06/15 Python
Python实现将通信达.day文件读取为DataFrame
2018/12/22 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
2019/06/25 Python
Python实现Kerberos用户的增删改查操作
2020/12/14 Python
详解CSS3伸缩布局盒模型Flex布局
2018/08/20 HTML / CSS
NEW LOOK官网:英国时装零售巨头之一,快时尚品牌
2017/01/11 全球购物
Parts Express:音频、视频和扬声器的第一来源
2017/04/25 全球购物
联想台湾官网:Lenovo TW
2018/05/09 全球购物
英国网上购买肉类网站:Great British Meat
2018/10/17 全球购物
什么是Oracle的后台进程background processes?都有哪些后台进程?
2012/04/26 面试题
期末自我鉴定
2014/01/23 职场文书
五四演讲稿范文
2014/09/03 职场文书
党员对十八届四中全会的期盼思想汇报范文
2014/10/17 职场文书
接收函
2019/04/22 职场文书
MySQL空间数据存储及函数
2021/09/25 MySQL