源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

简单谈谈关于 npm 5.0 的新坑

  • 时间:2022-03-15 23:19 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:简单谈谈关于 npm 5.0 的新坑
[b]前言[/b] 前几天升级了 Node.js v8.0 后,自带的 npm 也升级到了5.0,第一次使用的时候确实惊艳到了:原本重新安装一次模块要十几秒到事情,现在一秒多就搞定了。 [b]先不要激动,现在我来大概讲一下 npm 5 的一些大的变化:[/b] [list] [*]使用[code]npm install xxx[/code]命令安装模块时,不再需要--save选项,会自动将模块依赖信息保存到 package.json 文件;[/*] [*]安装模块操作(改变 node_modules 文件夹内容)会生成或更新 package-lock.json 文件[/*] [*]发布的模块不会包含 package-lock.json 文件[/*] [*]如果手动修改了 package.json 文件中已有模块的版本,直接执行[code]npm install[/code]不会安装新指定的版本,只能通过[code]npm install xxx@yy[/code]更新[/*] [/list] 重新安装模块之所以快,是因为 package-lock.json 文件中已经记录了整个 node_modules 文件夹的树状结构,甚至连模块的下载地址都记录了,再重新安装的时候只需要直接下载文件即可(这样看起来 facebook 的 yarn 好像没有啥优势了)。 [b]以下是 package-lock.json 文件的例子:[/b]
{
 "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="
 }
 }}
[b]带来速度的同时,npm 也挖了个大大的坑:[/b] 以后直接改 package.json 文件相应模块的版本号,再执行[code]npm install[/code]不会更新了(好可怕),你只能手动用npm [code]install xxx@yy[/code]指定版本号来安装,然后它会自动更新 package-lock.json 文件。直接执行[code]npm install[/code]时,如果不存在 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,等别人把坑填了再上。 [b]总结[/b] 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对编程素材网的支持。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部