当前位置:首页 > 编程教程 > node技术文章 > 简单谈谈关于 npm 5.0 的新坑

npm 5.0 学习中遇到的坑

  • 发布时间:
  • 作者:码农之家
  • 点击:175

这篇文章主要知识点是关于npm、nodejs、的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

写给PHP开发者的Node.js学习指南
  • 类型:Node.js大小:3.46 MB格式:PDF作者:Daniel Howard
立即下载

简单谈谈关于 npm 5.0 的新坑

前言

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对码农之家的支持。

以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。

您可能感兴趣的文章:

  • 解决NodeJs安装npm包一直失败的方法步骤
  • npm 相关电子书
    学习笔记
    网友NO.497624

    Nodejs中 npm常用命令详解

    npm是什么 NPM的全称是Node Package Manager,是随同NodeJS一起安装的包管理和分发工具,它很方便让JavaScript开发者下载、安装、上传以及管理已经安装的包。 npm是一个node包管理和分发工具,已经成为了非官方的发布node模块(包)的标准。有了npm,可以很快的找到特定服务要使用的包,进行下载、安装以及管理已经安装的包。 1、npm install moduleNames:安装Node模块 安装完毕后会产生一个node_modules目录,其目录下就是安装的各个node模块。 node的安装分为全局模式和本地模式。 一般情况下会以本地模式运行,包会被安装到和你的应用程序代码的本地node_modules目录下。 在全局模式下,Node包会被安装到Node的安装目录下的node_modules下。 全局安装命令为$npm install -g moduleName。 获知使用$npm set global=true来设定安装模式,$npm get global可以查看当前使用的安装模式。 示例:……

    网友NO.239908

    解决nodejs的npm命令无反应的问题

    最近在弄cordova,又要折腾nodejs了。 今天安装cordova模块的时候,看到nodejs的默认模块安装路径在c盘 于是想修改下,按命令 npm config set prefix 。 结果就遇坑了,之后我的npm命令完全无反应,不是加载的那种状态 而是下标不停地在哪里闪... 之后找解决方案,说要删除npmrc文件。 强调: 不是nodejs安装目录npm模块下的那个npmrc文件 而是在C:\Users\{账户}\下的.npmrc文件.... ok,可以使用npm命令了。 以上这篇解决nodejs的npm命令无反应的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。 ……

    <
    1
    >

    Copyright 2018-2020 www.xz577.com 码农之家

    版权投诉 / 书籍推广 / 赞助:520161757@qq.com