简单谈谈关于 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遍历Json的两种数据结构的实现代码
Jan 19 Javascript
js之事件冒泡和事件捕获详细介绍
Oct 28 Javascript
Javascript连接多个数组不用concat来解决
Mar 24 Javascript
node.js中的socket.io入门实例
Apr 26 Javascript
DOM 事件流详解
Jan 20 Javascript
Javascript实现可旋转的圆圈实例代码
Aug 04 Javascript
基于jquery实现表格内容筛选功能实例解析
May 09 Javascript
详解Vue-cli 创建的项目如何跨域请求
May 18 Javascript
带你快速理解javascript中的事件模型
Aug 14 Javascript
浅谈react受控组件与非受控组件(小结)
Feb 09 Javascript
jQuery pagination分页示例详解
Oct 23 jQuery
Jquery让form表单异步提交代码实现
Nov 14 jQuery
微信小程序开发之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
一个oracle+PHP的查询的例子
2006/10/09 PHP
PHP 命令行参数详解及应用
2011/05/18 PHP
简单的PHP缓存设计实现代码
2011/09/30 PHP
PHP采用curl模仿用户登陆新浪微博发微博的方法
2014/11/07 PHP
php版微信小店调用api示例代码
2016/11/12 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
日期函数扩展类Ver0.1.1
2006/09/07 Javascript
jquery Mobile入门—外部链接切换示例代码
2013/01/08 Javascript
jQuery 写的简单打字游戏可以提示正确和错误的次数
2014/07/01 Javascript
Webwork 实现文件上传下载代码详解
2016/02/02 Javascript
浅谈JavaScript中数组的增删改查
2016/06/20 Javascript
微信小程序movable view移动图片和双指缩放实例代码
2017/08/08 Javascript
解决vue跨域axios异步通信问题
2019/04/17 Javascript
微信小程序基于canvas渐变实现的彩虹效果示例
2019/05/03 Javascript
VUE+elementui组件在table-cell单元格中绘制微型echarts图
2020/04/20 Javascript
Python Selenium Cookie 绕过验证码实现登录示例代码
2018/04/10 Python
Python操作Sql Server 2008数据库的方法详解
2018/05/17 Python
解决python中使用PYQT时中文乱码问题
2019/06/17 Python
Pandas之ReIndex重新索引的实现
2019/06/25 Python
使用CSS3实现input多选框自定义样式的方法示例
2019/07/19 HTML / CSS
Grow Gorgeous美国官网:只要八天,体验唤醒毛囊后新生的茂密秀发
2018/06/04 全球购物
巴西补充剂和维生素购物网站:Natue
2019/06/17 全球购物
高中生学习总结的自我评价范文
2013/10/13 职场文书
小学毕业感言300字
2014/02/19 职场文书
材料会计岗位职责
2014/03/06 职场文书
出纳会计岗位职责
2014/03/12 职场文书
珍惜资源保护环境的建议书
2014/05/14 职场文书
维护民族团结演讲稿
2014/08/27 职场文书
个人总结与自我评价
2014/09/18 职场文书
500字小学生检讨书
2015/02/19 职场文书
博士给导师的自荐信
2015/03/06 职场文书
陪护人员误工证明
2015/06/24 职场文书
企业文化学习心得体会
2016/01/21 职场文书
2016幼儿教师自荐信范文
2016/01/28 职场文书
Mysql中存储引擎的区别及比较
2021/06/04 MySQL
解决Jenkins集成SonarQube遇到的报错问题
2021/07/15 Java/Android