简单谈谈关于 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 相关文章推荐
用js实现键盘方向键翻页功能的代码
Jun 03 Javascript
关于js类的定义
Jun 28 Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
Sep 13 Javascript
jQuery EasyUI API 中文文档 - Documentation 文档
Sep 29 Javascript
jquery的总体架构分析及实现示例详解
Nov 08 Javascript
easyui form validate总是返回false的原因及解决方法
Nov 07 Javascript
Node.js中看JavaScript的引用
Apr 22 Javascript
详解webpack性能优化——DLL
Oct 20 Javascript
layui table 参数设置方法
Aug 14 Javascript
JS判断浏览器类型与操作系统的方法分析
Apr 30 Javascript
使用 UniApp 实现小程序的微信登录功能
Jun 09 Javascript
解决vue页面刷新,数据丢失的问题
Nov 24 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下使用CURL方式POST数据至API接口的代码
2013/02/14 PHP
CodeIgniter使用phpcms模板引擎
2013/11/12 PHP
php支付宝APP支付功能
2020/07/29 PHP
Javascript miscellanea -display data real time, using window.status
2007/01/09 Javascript
打造基于jQuery的高性能TreeView(asp.net)
2011/02/23 Javascript
用jQuery模拟页面加载进度条的实现代码
2011/12/19 Javascript
jQuery.query.js 取参数的两点问题分析
2012/08/06 Javascript
使用POST方式弹出窗口的两种方法示例介绍
2014/01/29 Javascript
JavaScript中5种调用函数的方法
2015/03/12 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
2015/08/04 Javascript
jQuery实现动态表单验证时文本框抖动效果完整实例
2015/08/21 Javascript
浅谈Angular 观察者模式理解
2018/11/01 Javascript
微信小程序实现渐入渐出动画效果
2019/06/13 Javascript
Vuex实现简单购物车
2021/01/10 Vue.js
Python线程的两种编程方式
2015/04/14 Python
Python设置Socket代理及实现远程摄像头控制的例子
2015/11/13 Python
Odoo中如何生成唯一不重复的序列号详解
2018/02/10 Python
python实现寻找最长回文子序列的方法
2018/06/02 Python
Python2包含中文报错的解决方法
2018/07/09 Python
matplotlib实现区域颜色填充
2019/03/18 Python
django多个APP的urls设置方法(views重复问题解决)
2019/07/19 Python
Keras 加载已经训练好的模型进行预测操作
2020/06/17 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
2020/07/03 Python
python使用selenium爬虫知乎的方法示例
2020/10/28 Python
用python对excel查重
2020/12/07 Python
基于CSS3实现的黑色个性导航菜单效果
2015/09/14 HTML / CSS
韩国三星集团旗下时尚品牌官网:SSF SHOP
2016/08/02 全球购物
委托书样本
2014/04/02 职场文书
竞选大队长演讲稿
2014/04/29 职场文书
师范大学生求职信
2014/06/13 职场文书
幼儿园心得体会范文
2016/01/21 职场文书
2016年小学教师政治学习心得体会
2016/01/23 职场文书
创业计划书之废品回收
2019/09/26 职场文书
Python多线程 Queue 模块常见用法
2021/07/04 Python
《我的美好婚事》动画化决定纪念插画与先导PV公开
2022/04/06 日漫
JS精髓原型链继承及构造函数继承问题纠正
2022/06/16 Javascript