简单谈谈关于 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 相关文章推荐
chrome下img加载对height()的影响示例探讨
May 26 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
Sep 28 Javascript
基于javascript实现右下角浮动广告效果
Jan 08 Javascript
详解Vue.js动态绑定class
Dec 20 Javascript
JS去掉字符串前后空格或去掉所有空格的用法
Mar 25 Javascript
jQuery实现动态添加、删除按钮及input输入框的方法
Apr 27 jQuery
vue组件间通信子与父详解(二)
Nov 07 Javascript
js阻止默认右键的下拉菜单方法
Jan 02 Javascript
jQuery替换节点元素的操作方法
Mar 18 jQuery
angularJS开发注意事项
May 26 Javascript
vue + typescript + 极验登录验证的实现方法
Jun 27 Javascript
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
Mar 17 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 addslashes及其他清除空格的方法是不安全的
2012/01/25 PHP
CI框架中集成CKEditor编辑器的教程
2014/06/09 PHP
php中file_get_contents与curl性能比较分析
2014/11/08 PHP
PHP连接access数据库
2015/03/27 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
2017/09/27 PHP
如何让PHP编码更加好看利于阅读
2019/05/12 PHP
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
javascript 使td内容不换行不撑开
2012/11/29 Javascript
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
WEB前端设计师常用工具集锦
2014/12/09 Javascript
Javascript基础教程之变量
2015/01/18 Javascript
javascript实现模拟时钟的方法
2015/05/13 Javascript
js添加绑定事件的方法
2016/05/15 Javascript
node.js 中国天气预报 简单实现
2016/06/06 Javascript
BootStrap实现树形目录组件代码详解
2016/06/21 Javascript
Jq通过td获取同行其它列td的方法
2016/10/05 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
Vue插件之滑动验证码用法详解
2020/04/05 Javascript
JS制作简易计算器的实例代码
2020/07/04 Javascript
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
Python高效编程技巧
2013/01/07 Python
Python探索之修改Python搜索路径
2017/10/25 Python
python virtualenv虚拟环境配置与使用教程详解
2020/07/13 Python
python与idea的集成的实现
2020/11/20 Python
中学劳技课教师的自我评价
2014/02/05 职场文书
开工仪式主持词
2014/03/20 职场文书
超市中秋节促销方案
2014/03/21 职场文书
《毛主席在花山》教学反思
2014/04/20 职场文书
2014年教师党员自我评价范文
2014/09/22 职场文书
施工安全协议书范本
2014/09/26 职场文书
教师群众路线剖析材料
2014/09/29 职场文书
党的群众路线教育实践活动个人对照检查材料(医生)
2014/11/05 职场文书
2015年见习期工作总结
2014/12/12 职场文书
2016党员入党决心书
2015/09/22 职场文书
python实现socket简单通信的示例代码
2021/04/13 Python
python中的被动信息搜集
2021/04/29 Python