package-lock.json
package.json
npm是一个管理package之间依赖关系的管理器,它允许开发者在package.json中间标出自己项目对npm各库包的依赖。例如:
"dependencies": {
"@vue/eslint-config-prettier": "^4.0.1",
"axios": "^0.18.0",
"core-js": "^2.6.5",
"fastclick": "^1.0.6",
"js-base64": "^2.5.1",
"mint-ui": "^2.2.13",
"vue": "^2.6.10",
"vue-router": "^3.0.3",
"vuex": "^3.0.1"
}
^表示向后(新)兼容依赖。上例中axios的版本是超过0.18.0,并在大版本上相同,就允许下载最新版本的axios库包,实际上可能运行npm i 时下载的具体版本可能是0.18.1。
package.json文件只记录你通过npm install方式安装的模块信息,而这些模块所依赖的其他子模块的信息不会记录。
注意:
假设我们创建了一个将使用vue的新项目。 运行npm init后,我们安装vue:npm install vue - save。在编写代码时,最新的版本是^2.6.10,所以 “vue”:“^ 2.6.10”作为我的package.json中的依赖项添加,并且我的电脑安装了确切的版本。
现在也许明天,vue 的维护者会发布 bug 修复,因此最新版本变为3.0.0。 然后,如果有人想要为我的项目做贡献,他们会克隆它,然后运行`npm install。'因为3.0.0是具有相同主要版本的更高版本,所以为它们安装。 我们都安装 vue ,但我们却是不同的版本。
如果我们安装的包有bug,该怎么办,以前直接改掉package.json中的版本,然后npm i 就可以了,但是5版本后就不支持这么做了,因为版本锁定在了package.json里面了,只能通过 npm install xxx(更新小版本)或者npm install xxx@xxx(指定版本号)来更新依赖,然后package-lock.json随之更新。
package-lock.json
package-lock.json应运而生,只要开发者保存了源文件,到一个新的机器上、或者新的下载源,只要按照package-lock.json所表示的具体版本下载依赖库包,就能确保所有库包与你上次安装的完全一样。
package-lock.json文件锁定所有模块的版本号,包括主模块和所有依赖子模块。当你执行npm install时,node从package.sjon文件读取模块名,从package-lock.json文件中获取版本号,然后下载更新.
原本package.json文件只要锁定大版本,并不能锁定后面的小版本,每次npm i 都是拉取大本版下的最新的版本,package-lock.json使得每次安装依赖的时候就锁定在你安装的那个版本。