简单谈谈关于 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 相关文章推荐
简明json介绍
Sep 28 Javascript
javascript定义变量时加var与不加var的区别
Dec 22 Javascript
jquery+html5时钟特效代码分享(可设置闹钟并且语音提醒)
Mar 30 Javascript
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
Oct 05 Javascript
node.js中的事件处理机制详解
Nov 26 Javascript
基于JS实现bookstore静态页面的实例代码
Feb 22 Javascript
js实现手机发送验证码功能
Mar 13 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
Mar 15 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
Jul 13 Javascript
实例讲解v-if和v-show的区别
Jan 31 Javascript
JS替换字符串中指定位置的字符(多种方法)
May 28 Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
Sep 24 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
Yii清理缓存的方法
2016/01/06 PHP
用Javascript实现UTF8编码转换成gb2312编码
2006/12/22 Javascript
jQuery-ui中自动完成实现方法
2010/06/10 Javascript
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
2014/01/06 Javascript
深入理解JS函数的参数(arguments)的使用
2016/05/28 Javascript
EasyUI Pagination 分页的两种做法小结
2016/07/09 Javascript
js中通过getElementsByName访问name集合对象的方法
2016/10/31 Javascript
JavaScript 详解预编译原理
2017/01/22 Javascript
JS SetInterval 代码实现页面轮询
2017/08/11 Javascript
浅谈Angular4中常用管道
2017/09/27 Javascript
vue生命周期实例小结
2018/08/15 Javascript
使用vue自定义指令开发表单验证插件validate.js
2019/05/23 Javascript
Node.js系列之连接DB的方法(3)
2019/08/30 Javascript
解决Vue动态加载本地图片问题
2019/10/09 Javascript
详解vue-router的Import异步加载模块问题的解决方案
2020/05/13 Javascript
在react-antd中弹出层form内容传递给父组件的操作
2020/10/24 Javascript
Vue+scss白天和夜间模式切换功能的实现方法
2021/01/05 Vue.js
python实现音乐下载器
2018/04/15 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
2018/12/20 Python
python+selenium 鼠标事件操作方法
2019/08/24 Python
html5跳转小程序wx-open-launch-weapp踩坑
2020/12/02 HTML / CSS
Bally美国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/18 全球购物
新锐科技Java程序员面试题
2016/07/25 面试题
毕业生个人的求职信范文
2013/12/03 职场文书
运动会开幕式邀请函
2014/01/22 职场文书
社团活动总结书
2014/06/27 职场文书
家庭贫困证明
2014/09/23 职场文书
群众路线自查报告及整改措施
2014/11/04 职场文书
亲属关系公证书样本
2015/01/23 职场文书
公司内部升职自荐信
2015/03/27 职场文书
收银员岗位职责范本
2015/04/07 职场文书
2016年“世界环境日”校园广播稿
2015/12/18 职场文书
2019辞职报告范本3篇!
2019/07/23 职场文书
Python 中数组和数字相乘时的注意事项说明
2021/05/10 Python
MySQL 用 limit 为什么会影响性能
2021/09/15 MySQL