简单谈谈关于 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 相关文章推荐
读jQuery之十三 添加事件和删除事件的核心方法
Aug 23 Javascript
jquery.artwl.thickbox.js  一个非常简单好用的jQuery弹出层插件
Mar 01 Javascript
css transform 3D幻灯片特效实现步骤解读
Mar 27 Javascript
jquery对table中各数据的增加、保存、删除操作示例
May 14 Javascript
JS基于面向对象实现的放烟花效果
May 07 Javascript
js实现Select列表内容自动滚动效果代码
Aug 20 Javascript
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
Apr 10 jQuery
JS中使用gulp实现压缩文件及浏览器热加载功能
Jul 12 Javascript
JS实现按钮颜色切换效果
Sep 05 Javascript
JS去除字符串最后的逗号实例分析【四种方法】
Jun 20 Javascript
vue自定义正在加载动画的例子
Nov 14 Javascript
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
Feb 15 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网页游戏学习之Xnova(ogame)源码解读(十六)
2014/06/30 PHP
golang 调用 php7详解及实例
2017/01/04 PHP
PHP生成(支持多模板)二维码海报代码
2018/04/30 PHP
一个多次搜索+多次传值的解决方案
2007/01/20 Javascript
JavaScript浏览器选项卡效果
2010/08/25 Javascript
推荐17个优美新鲜的jQuery的工具提示插件
2012/09/14 Javascript
javascript window.open打开新窗口后无法再次打开该窗口问题的解决方法
2014/04/12 Javascript
javascript数据结构之二叉搜索树实现方法
2015/11/25 Javascript
javascript html实现网页版日历代码
2016/03/08 Javascript
JavaScript使用ZeroClipboard操作剪切板
2017/05/10 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
Vue源码解析之Template转化为AST的实现方法
2018/12/14 Javascript
node.js监听文件变化的实现方法
2019/04/17 Javascript
JavaScript的Proxy可以做哪些有意思的事儿
2019/06/15 Javascript
Vue拖拽组件列表实现动态页面配置功能
2019/06/17 Javascript
JavaScript制作3D旋转相册
2020/08/02 Javascript
JavaScript实现文件下载并重命名代码实例
2019/12/12 Javascript
js 计算月/周的第一天和最后一天代码
2020/02/01 Javascript
Python 多线程抓取图片效率对比
2016/02/27 Python
Python的爬虫程序编写框架Scrapy入门学习教程
2016/07/02 Python
Python 实现随机数详解及实例代码
2017/04/15 Python
基于python3 类的属性、方法、封装、继承实例讲解
2017/09/19 Python
浅谈Python实现Apriori算法介绍
2017/12/20 Python
redis之django-redis的简单缓存使用
2018/06/07 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
python实现朴素贝叶斯算法
2018/11/19 Python
Pytorch to(device)用法
2020/01/08 Python
HTML5 Canvas锯齿图代码实例
2014/04/10 HTML / CSS
美国第一香水网站:Perfume.com
2017/01/23 全球购物
德国电子产品购物网站:TechInTheBasket德国
2018/12/07 全球购物
如何在Oracle中查看各个表、表空间占用空间的大小
2015/10/31 面试题
优秀技术工人先进材料
2014/02/17 职场文书
《傅雷家书》教学反思
2014/04/20 职场文书
销售队伍口号
2014/06/11 职场文书
2014幼儿园卫生保健工作总结
2014/12/05 职场文书
婚礼上证婚人致辞
2015/07/28 职场文书