简单谈谈关于 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 学习之JSON in JavaScript详细使用说明
Feb 23 Javascript
javascript面向对象编程代码
Dec 19 Javascript
javascript:void(0)是什么意思示例介绍
Nov 17 Javascript
PassWord输入框代码分享
Jun 07 Javascript
JavaScript获取IP获取的是IPV6 如何校验
Jun 12 Javascript
AngularJS Phonecat实例讲解
Nov 21 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
Dec 02 Javascript
解决ionic和angular上拉加载的问题
Aug 03 Javascript
Angular6中使用Swiper的方法示例
Jul 09 Javascript
微信小程序实现九宫格抽奖
Apr 15 Javascript
基于vue手写tree插件的那点事儿
Aug 20 Javascript
vue element 关闭当前tab 跳转到上一路由操作
Jul 22 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
如何设置mysql允许外网访问
2013/06/04 PHP
PHP获取文件行数的方法
2015/06/10 PHP
yii2.0实现验证用户名与邮箱功能
2015/12/22 PHP
用CSS+JS实现的进度条效果效果
2007/06/05 Javascript
JavaScript读取中文cookie时的乱码问题的解决方法
2009/10/14 Javascript
基于jQuery的星级评分插件
2011/08/12 Javascript
js中window.open()的所有参数详细解析
2014/01/09 Javascript
Javascript 按位与运算符 (&)使用介绍
2014/02/04 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
2014/04/12 Javascript
javascript实现简单查找与替换的方法
2015/07/22 Javascript
详谈JS中实现种子随机数及作用
2016/07/19 Javascript
基于VUE移动音乐WEBAPP跨域请求失败的解决方法
2018/01/16 Javascript
vue实现动态添加数据滚动条自动滚动到底部的示例代码
2018/07/06 Javascript
JS实现简单的点赞与踩功能示例
2018/12/05 Javascript
微信小程序的注册页面包含倒计时验证码、获取用户信息
2019/05/22 Javascript
使用js在layui中实现上传图片压缩
2019/06/18 Javascript
Vue 2.0 中依赖注入 provide/inject组合实战
2019/06/20 Javascript
React Native 混合开发多入口加载方式详解
2019/09/23 Javascript
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
javascript浅层克隆、深度克隆对比及实例解析
2020/02/09 Javascript
浅谈vue生命周期共有几个阶段?分别是什么?
2020/08/07 Javascript
python写的一个squid访问日志分析的小程序
2014/09/17 Python
Python中import机制详解
2017/11/14 Python
纯python实现机器学习之kNN算法示例
2018/03/01 Python
Flask框架信号用法实例分析
2018/07/24 Python
Python Django 封装分页成通用的模块详解
2019/08/21 Python
python 调试冷知识(小结)
2019/11/11 Python
python爬虫开发之selenium模块详细使用方法与实例全解
2020/03/09 Python
django queryset相加和筛选教程
2020/05/18 Python
浅析python字符串前加r、f、u、l 的区别
2021/01/24 Python
用CSS禁用输入法(CSS3 UI规范)实例解析
2012/12/04 HTML / CSS
小松树教学反思
2014/02/11 职场文书
应届毕业生求职信
2014/05/26 职场文书
2015新学期开学寄语
2015/02/26 职场文书
公司放假通知范文
2015/04/14 职场文书
爸爸的三轮车观后感
2015/06/16 职场文书