简单谈谈关于 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 相关文章推荐
各浏览器中querySelector和querySelectorAll的实现差异分析
May 23 Javascript
jQuery事件绑定.on()简要概述及应用
Feb 07 Javascript
自定义jQuery选项卡插件实例
Mar 27 Javascript
js去空格技巧分别去字符串前后、左右空格
Oct 21 Javascript
javascript设计简单的秒表计时器
Sep 05 Javascript
基于JQuery实现图片轮播效果(焦点图)
Feb 02 Javascript
PHP+jquery+ajax实现分页
Dec 09 Javascript
BootStrap的两种模态框方式
May 10 Javascript
微信小程序实战篇之购物车的实现代码示例
Nov 30 Javascript
在小程序Canvas中使用measureText的方法示例
Oct 19 Javascript
vue如何使用async、await实现同步请求
Dec 09 Javascript
Node与Python 双向通信的实现代码
Jul 16 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脚本的10个技巧(4)
2006/10/09 PHP
php的POSIX 函数以及进程测试的深入分析
2013/06/03 PHP
一些php项目中比较通用的php自建函数的详解
2013/06/06 PHP
PHP实现多图片上传类实例
2014/07/26 PHP
分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
2015/12/01 PHP
PHP生成和获取XML格式数据的方法
2016/03/04 PHP
实例讲解php实现多线程
2019/01/27 PHP
this[] 指的是什么内容 讨论
2007/03/24 Javascript
javascript 写的一个简单的timer
2009/07/30 Javascript
对js关键字命名的疑问介绍
2014/04/25 Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
2016/01/26 Javascript
javascript ES6中箭头函数注意细节小结
2017/02/17 Javascript
Angular指令之restict匹配模式的详解
2017/07/27 Javascript
vue 中的keep-alive实例代码
2018/07/20 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
前端路由&webpack基础配置详解
2019/06/10 Javascript
vue 源码解析之虚拟Dom-render
2019/08/26 Javascript
完美解决vue 中多个echarts图表自适应的问题
2020/07/19 Javascript
json.stringify()与json.parse()的区别以及用处
2021/01/25 Javascript
Python安装模块的常见问题及解决方法
2018/02/05 Python
带你认识Django
2019/01/15 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
2019/06/05 Python
django最快程序开发流程详解
2019/07/19 Python
Python中base64与xml取值结合问题
2019/12/22 Python
python @propert装饰器使用方法原理解析
2019/12/25 Python
python查询MySQL将数据写入Excel
2020/10/29 Python
html5手机键盘弹出收起的处理
2020/01/20 HTML / CSS
全球知名鞋履品牌授权零售商:Journeys
2016/09/17 全球购物
MCAKE蛋糕官方网站:一直都是巴黎的味道
2018/02/06 全球购物
写给学生的新学期寄语
2014/01/18 职场文书
护林员个人总结
2015/03/04 职场文书
《风筝》教学反思
2016/02/23 职场文书
个人工作失误的保证书怎么写?
2019/06/21 职场文书
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
2021/04/03 Python
AI:如何训练机器学习的模型
2021/04/16 Python
Java详细解析==和equals的区别
2022/04/07 Java/Android