简单理解: XYZ 的格式node
对应为: 主版本号.次版本号.修订号,版本号递增规则以下:express
主版本号:当你作了不兼容的 API 修改,npm
次版本号:当你作了向下兼容的功能性新增,json
修订号:当你作了向下兼容的问题修正。插件
假设咱们建立了一个新项目,它将使用express。 在运行npm init以后,在撰写本项目时,最新的express版本是4.15.4。 (默认状况下,npm 将安装最新版本)it
所以在package.json中,"express":"^ 4.15.4"被添加做为依赖项。 假设明天,express的维护者会发布一个 bug 修复,因此最新版本变成了4.15.5。 而后,若是有人想要为个人项目作贡献,他们会克隆它,而后运行 npm install, 由于4.15.5是一个更高版本的主要版本,这是为他们安装的。 咱们都有express依赖,但咱们有两个不一样的版本。 理论上,它们应该仍是兼容的,可是也许这个 bug 会影响咱们正在使用的功能,而咱们的应用程序在使用Express版本4.15.4与4.15.5进行比较时会产生不一样的结果.io
而package-lock.json的做用就是用来保证咱们的应用程序依赖之间的关系是一致的, 兼容的.module
当不存在package-lock.json文件时,使用npm install时,会自动生成这个文件。当存在这个文件时,使用npm install安装,会安装package-lock.json里指定版本的插件,并且相比没有package-lock.json文件时,安装速度会快不少。由于package-lock.json文件里已经存在插件的版本、下载地址、整个node_modules的结构等信息。plugin
当存在package-lock.json文件时,每次npm install安装就会安装package-lock.json里对应插件的版本。这样同一份package-lock.json文件,你们安装的插件版本一致。下载
若是某个插件版本变动。又不想删除package-lock.json文件,从新生成。方法是:npm install plugin@version,及从新安装这个插件,并指定插件的版本,这样,package.json和package-lock.json会自动更新。固然,也能够直接修改package-lock.json文件,这样npm install时,也会安装修改后的版本。可是若是只修改package.json,不修改package-lock.json,npm install仍是会安装package-lock.json里的插件版本。