说说 npm 5 的新坑

栏目: Node.js · 发布时间: 7年前

内容简介:说说 npm 5 的新坑

前几天升级了 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,等别人把坑填了再上。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

创新者的窘境(全新修订版)

创新者的窘境(全新修订版)

克莱顿•克里斯坦森 / 胡建桥 / 中信出版社 / 2014-1-1 / 48.00元

全球商业领域中,许多企业曾叱咤风云,但面对市场变化及新技术的挑战,最终惨遭淘汰。究其原因,竟然是因为它们精于管理,信奉客户至上等传统商业观念。这就是所有企业如今都正面临的“创新者的窘境”。 在《创新者的窘境》中,管理大师克里斯坦森指出,一些看似很完美的商业动作——对主流客户所需、赢利能力最强的产品进行精准投资和技术研发——最终却很可能毁掉一家优秀的企业。他分析了计算机、汽车、钢铁等多个行业的......一起来看看 《创新者的窘境(全新修订版)》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具