简单谈谈关于 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 checkbox全选、取消全选实现代码
Mar 05 Javascript
jquery jqPlot API 中文使用教程(非常强大的图表工具)
Aug 15 Javascript
js操作CheckBoxList实现全选/反选(在客服端完成)
Feb 02 Javascript
提示$ is not defined错误分析及解决
Apr 09 Javascript
Javascript基础教程之函数对象和属性
Jan 18 Javascript
详细解读Jquery各Ajax函数($.get(),$.post(),$.ajax(),$.getJSON())
Aug 15 Javascript
BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法
Dec 01 Javascript
JavaScript使用ZeroClipboard操作剪切板
May 10 Javascript
推荐15个最好用的JavaScript代码压缩工具
Feb 13 Javascript
vue实现的网易云音乐在线播放和下载功能案例
Feb 18 Javascript
vue源码nextTick使用及原理解析
Aug 13 Javascript
vue实现可拖拽的dialog弹框
May 13 Vue.js
微信小程序开发之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/03 冲泡冲煮
php对gzip文件或者字符串解压实例参考
2008/07/25 PHP
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
2010/12/29 PHP
谷歌音乐搜索栏的提示功能php修正代码
2011/05/09 PHP
深入理解PHP中的Session和Cookie
2013/06/21 PHP
关于php循环跳出的问题
2013/07/01 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
2015/07/08 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
PHP抽象类基本用法示例
2018/12/28 PHP
你必须知道的Javascript知识点之"this指针"的应用
2013/04/23 Javascript
js window.print实现打印特定控件或内容
2013/09/16 Javascript
JQuery的$命名冲突详细解析
2013/12/28 Javascript
Angularjs注入拦截器实现Loading效果
2015/12/28 Javascript
通过Ajax使用FormData对象无刷新上传文件方法
2016/12/08 Javascript
js数组去重的hash方法
2016/12/22 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
2017/01/19 Javascript
jquery处理checkbox(复选框)是否被选中实例代码
2017/06/12 jQuery
jQuery 实现鼠标画框并对框内数据选中的实例代码
2017/08/29 jQuery
JavaScript适配器模式详解
2017/10/19 Javascript
js实现随机数小游戏
2019/06/28 Javascript
vue 输入电话号码自动按3-4-4分割功能的实现代码
2020/04/30 Javascript
[03:11]DOTA2上海特锦赛小组赛第一日recap精彩回顾
2016/02/28 DOTA
Python实例分享:快速查找出被挂马的文件
2014/06/08 Python
利用Opencv中Houghline方法实现直线检测
2018/02/11 Python
简单实现Python爬取网络图片
2018/04/01 Python
python3+PyQt5实现自定义流体混合窗口部件
2018/04/24 Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
2019/08/01 Python
Python 从subprocess运行的子进程中实时获取输出的例子
2019/08/14 Python
three.js模拟实现太阳系行星体系功能
2019/09/03 HTML / CSS
好人好事事迹材料
2014/02/12 职场文书
洗车工岗位职责
2014/03/15 职场文书
关于青春的演讲稿
2014/05/05 职场文书
基石观后感
2015/06/12 职场文书
珍爱生命主题班会
2015/08/13 职场文书
Nginx安装完成没有生成sbin目录的解决方法
2021/03/31 Servers
mysql中varchar类型的日期进行比较、排序等操作的实现
2021/11/17 MySQL