简单谈谈关于 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 相关文章推荐
Wordpress ThickBox 点击图片显示下一张图的修改方法
Dec 11 Javascript
jquery如何获取元素的滚动条高度等实现代码
Oct 19 Javascript
JS常用字符串方法(推荐)
Jan 15 Javascript
最佳的JavaScript错误处理实践
Jul 16 Javascript
微信小程序 下拉列表的实现实例代码
Mar 08 Javascript
Vue插件写、用详解(附demo)
Mar 20 Javascript
Bootstrap Tooltip显示换行和左对齐的解决方案
Oct 11 Javascript
基于Vue实现图书管理功能
Oct 17 Javascript
js 数组详细操作方法及解析合集
Jun 01 Javascript
nodemon实现Typescript项目热更新的示例代码
Nov 19 Javascript
vue 二维码长按保存和复制内容操作
Sep 22 Javascript
element多个表单校验的实现
May 27 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
Alliance vs Liquid BO3 第三场2.13
2021/03/10 DOTA
javascript里的条件判断
2007/02/27 Javascript
用javascript实现读取txt文档的脚本
2007/07/20 Javascript
JQUERY1.6 使用方法四 检测浏览器
2011/11/23 Javascript
jquery实现图片等比例缩放以及max-width在ie中不兼容解决
2013/03/21 Javascript
JQuery实现的图文自动轮播效果插件
2015/06/19 Javascript
javascript实现在下拉列表中显示多级树形菜单的方法
2015/08/12 Javascript
js钢琴按钮波浪式图片排列效果代码分享
2015/08/26 Javascript
JavaScript知识点总结(十)之this关键字
2016/05/31 Javascript
Javascript中函数名.length属性用法分析(对比arguments.length)
2016/09/16 Javascript
基于jQuery制作小图标上下滑动特效
2017/01/18 Javascript
javascript观察者模式实现自动刷新效果
2017/09/05 Javascript
微信小程序之页面拦截器的示例代码
2017/09/07 Javascript
Vue CLI3 开启gzip压缩文件的方式
2018/09/30 Javascript
vue实现滑动到底部加载更多效果
2020/10/27 Javascript
layer.open回调获取弹出层参数的实现方法
2019/09/10 Javascript
vue点击当前路由高亮小案例
2019/09/26 Javascript
微信内置浏览器图片查看器的代码实例
2019/10/08 Javascript
用Python制作在地图上模拟瘟疫扩散的Gif图
2015/03/31 Python
Python中的元类编程入门指引
2015/04/15 Python
python实现冒泡排序算法的两种方法
2018/03/10 Python
python生成带有表格的图片实例
2019/02/03 Python
django query模块
2019/04/20 Python
python算法与数据结构之冒泡排序实例详解
2019/06/22 Python
python批量修改文件名的示例
2020/09/27 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
2020/10/15 Python
详解HTML5 window.postMessage与跨域
2017/05/11 HTML / CSS
用canvas显示验证码的实现
2020/04/10 HTML / CSS
法国和欧洲海边和滑雪度假:Pierre & Vacances
2017/01/04 全球购物
微软日本官方网站:Microsoft日本
2017/11/26 全球购物
英国领先的体验日提供商:Buyagift
2019/04/19 全球购物
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
本科毕业生求职自荐信
2014/02/03 职场文书
社区居务公开实施方案
2014/03/27 职场文书
工业自动化专业自荐信范文
2014/04/10 职场文书
心灵点滴观后感
2015/06/02 职场文书