简单谈谈关于 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 相关文章推荐
AlertBox 弹出层信息提示框效果实现步骤
Oct 11 Javascript
JS仿flash上传头像效果实现代码
Jul 18 Javascript
javascript parseInt() 函数的进制转换注意细节
Jan 08 Javascript
bootstrap改变按钮加载状态
Dec 01 Javascript
js随机生成26个大小写字母
Feb 12 Javascript
jQuery插件cxSelect多级联动下拉菜单实例解析
Jun 24 Javascript
Vue.js中extend选项和delimiters选项的比较
Jul 17 Javascript
vue mounted组件的使用
Jun 18 Javascript
Layui给数据表格动态添加一行并跳转到添加行所在页的方法
Aug 20 Javascript
Vue中props的详解
May 16 Javascript
JavaScript This指向问题详解
Nov 25 Javascript
jQuery实现简单全选框
Sep 13 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
如何冲泡挂耳包咖啡?技巧是什么
2021/03/04 冲泡冲煮
PHP动态变静态原理
2006/11/25 PHP
PHP 代码规范小结
2012/03/08 PHP
深入php常用函数的使用汇总
2013/06/08 PHP
php 获取页面中指定内容的实现类
2014/01/23 PHP
CodeIgniter配置之config.php用法实例分析
2016/01/19 PHP
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
PHP大文件分割分片上传实现代码
2020/12/09 PHP
IE关闭时判断及AJAX注销案例学习
2013/02/18 Javascript
jquery.cookie.js用法实例详解
2015/12/25 Javascript
浅析Jquery操作select
2016/12/13 Javascript
js实现适合新闻类图片的轮播效果
2017/02/05 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
2017/09/06 Javascript
javascript 开发之网页兼容各种浏览器
2017/09/28 Javascript
解决iview多表头动态更改列元素发生的错误的方法
2018/11/02 Javascript
JS尾递归的实现方法及代码优化技巧
2019/01/19 Javascript
详解javascript replace高级用法
2019/02/17 Javascript
微信小程序基于高德地图查找位置并显示文字
2019/10/30 Javascript
JS操作Fckeditor的一些常用方法(获取、插入等)
2020/02/19 Javascript
基于javascript实现碰撞检测
2020/03/12 Javascript
pandas DataFrame 交集并集补集的实现
2019/06/24 Python
在cmd中查看python的安装路径方法
2019/07/03 Python
Django工程的分层结构详解
2019/07/18 Python
python通过txt文件批量安装依赖包的实现步骤
2019/08/13 Python
python实现批量处理将图片粘贴到另一张图片上并保存
2019/12/12 Python
基于pandas中expand的作用详解
2019/12/17 Python
django 扩展user用户字段inlines方式
2020/03/30 Python
浅谈Python中的生成器和迭代器
2020/06/19 Python
python 密码学示例——理解哈希(Hash)算法
2020/09/21 Python
2014年情人节活动方案
2014/02/16 职场文书
客户接待方案
2014/02/26 职场文书
双方协议书
2014/04/22 职场文书
资料员岗位职责范本
2015/04/13 职场文书
幼儿园园长工作总结2015
2015/05/25 职场文书
Mysql官方性能测试工具mysqlslap的使用简介
2021/05/21 MySQL
python中%格式表达式实例用法
2021/06/18 Python