简单谈谈关于 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 相关文章推荐
IE下js调试工具Companion.JS
Oct 15 Javascript
JavaScript截取字符串的Slice、Substring、Substr函数详解和比较
Mar 20 Javascript
js脚本实现数据去重
Nov 27 Javascript
jQuery bt气泡实现悬停显示及移开隐藏功能的方法
Jul 12 Javascript
对js中回调函数的一些看法
Aug 29 Javascript
jQuery中map函数的两种方式
Apr 07 jQuery
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
Dec 11 Javascript
详解Vue.directive 自定义指令
Mar 27 Javascript
JS学习笔记之原型链和利用原型实现继承详解
May 29 Javascript
js实现列表向上无限滚动
Jan 13 Javascript
es6中new.target的作用和使用场景简单示例分析
Mar 14 Javascript
介绍一下28个JS常用数组方法
May 06 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
了解咖啡雨林联盟认证 什么是雨林认证 雨林认证是什么意思
2021/03/05 新手入门
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
php实现数组重复数字统计实例
2018/09/30 PHP
php异常处理捕获错误整理
2019/09/23 PHP
Track Image Loading效果代码分析
2007/08/13 Javascript
JS去除字符串的空格增强版(可以去除中间的空格)
2009/08/26 Javascript
JSON辅助格式化处理方法
2013/03/26 Javascript
javascript用户注册提示效果的简单实例
2013/08/17 Javascript
解析javascript中鼠标滚轮事件
2015/05/26 Javascript
JQuery实现简单的图片滑动切换特效
2015/11/22 Javascript
客户端验证用户名和密码的方法详解
2016/06/16 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
2016/10/30 Javascript
jquery滚动条插件slimScroll使用方法
2017/02/09 Javascript
Vue中Table组件Select的勾选和取消勾选事件详解
2019/03/19 Javascript
微信小程序使用GoEasy实现websocket实时通讯
2020/05/19 Javascript
使用js和canvas实现时钟效果
2020/09/08 Javascript
Python 元组(Tuple)操作详解
2014/03/11 Python
win7上python2.7连接mysql数据库的方法
2017/01/14 Python
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
2017/06/20 Python
对python抓取需要登录网站数据的方法详解
2018/05/21 Python
Python datetime和unix时间戳之间相互转换的讲解
2019/04/01 Python
Python+PyQT5的子线程更新UI界面的实例
2019/06/14 Python
python logging.basicConfig不生效的原因及解决
2020/02/20 Python
python实现飞机大战项目
2020/03/11 Python
Django admin组件的使用
2020/10/24 Python
Quiksilver美国官网:始于1969年的优质冲浪服和滑雪板外套
2020/04/20 全球购物
土木工程应届生自荐信
2013/09/24 职场文书
行政办公员自我评价分享
2013/12/14 职场文书
4s店市场专员岗位职责
2014/04/09 职场文书
社会发展项目建议书
2014/08/25 职场文书
销售人才自我评价范文
2014/09/27 职场文书
教师岗位职责
2015/02/03 职场文书
创业计划书之家教托管
2019/09/25 职场文书
JavaGUI模仿QQ聊天功能完整版
2021/07/04 Java/Android
PHP正则表达式之RCEService回溯
2022/04/11 PHP
MySQL示例讲解数据库约束以及表的设计
2022/06/16 MySQL