简单谈谈关于 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 相关文章推荐
JavaScript NodeTree导航栏(菜单项JSON类型/自制)
Feb 01 Javascript
JavaScript将数据转换成整数的方法
Jan 04 Javascript
禁用Tab键JS代码兼容Firefox和IE
Apr 18 Javascript
Jquery实现Div上下移动示例
Apr 23 Javascript
jQuery焦点图轮播插件KinSlideshow用法分析
Jun 08 Javascript
基于vue2.x的电商图片放大镜插件的使用
Jan 22 Javascript
angularJS的radio实现单项二选一的使用方法
Feb 28 Javascript
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
Sep 07 Javascript
微信小程序textarea层级过高的解决方法
Mar 04 Javascript
解决vue.js提交数组时出现数组下标的问题
Nov 05 Javascript
JS图片懒加载的优点及实现原理
Jan 10 Javascript
Vue+element-ui添加自定义右键菜单的方法示例
Dec 08 Vue.js
微信小程序开发之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公用函数列表[正则]
2007/02/22 PHP
php SQL防注入代码集合
2008/04/25 PHP
php清除和销毁session的方法分析
2015/03/19 PHP
php自动给网址加上链接的方法
2015/06/02 PHP
php实现的验证码文件类实例
2015/06/18 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
2016/10/10 PHP
PHP多个图片压缩成ZIP的方法
2020/08/18 PHP
swoole锁的机制代码实例讲解
2021/03/04 PHP
经常用到的JavasScript事件的翻译
2007/04/09 Javascript
javascript中删除指定数组中指定的元素的代码
2011/02/12 Javascript
枚举的实现求得1-1000所有出现1的数字并计算出现1的个数
2013/09/10 Javascript
javascript学习笔记之10个原生技巧
2014/05/21 Javascript
JavaScript常用基础知识强化学习
2015/12/09 Javascript
js确认框confirm()用法实例详解
2016/01/07 Javascript
高性能JavaScript循环语句和条件语句
2016/01/20 Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
2016/03/14 Javascript
js document.getElementsByClassName的使用介绍与自定义函数
2016/11/25 Javascript
JS实现按钮添加背景音乐示例代码
2017/10/17 Javascript
[02:34]DOTA2英雄基础教程 幽鬼
2014/01/02 DOTA
[49:58]完美世界DOTA2联赛PWL S3 Magma vs DLG 第一场 12.18
2020/12/19 DOTA
Python线程详解
2015/06/24 Python
Python对CSV、Excel、txt、dat文件的处理
2018/09/18 Python
python3实现逐字输出的方法
2019/01/23 Python
pandas 如何分割字符的实现方法
2019/07/29 Python
Python基于数列实现购物车程序过程详解
2020/06/09 Python
学python最电脑配置有要求么
2020/07/05 Python
Python第三方包PrettyTable安装及用法解析
2020/07/08 Python
美国女性奢华品牌精品店:INTERMIX
2017/10/12 全球购物
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
美国手机支架公司:PopSockets
2019/11/27 全球购物
Java servlet面试题
2012/03/04 面试题
单位委托书怎么写
2014/08/02 职场文书
科级干部群众路线教育实践活动对照检查材料思想汇报
2014/09/20 职场文书
内乡县衙导游词
2015/02/05 职场文书
vue中 this.$set的使用详解
2021/11/17 Vue.js
Python之Matplotlib绘制热力图和面积图
2022/04/13 Python