package 与 package-lock文件的区别
我們首先來(lái)看一下package.json文件里的內(nèi)容
{"name": "xxxx","version": "0.1.0","private": true,"scripts": {"serve": "vue-cli-service serve --port 8081","build": "vue-cli-service build","lint": "vue-cli-service lint"},"dependencies": {"ant-design-vue": "^1.3.10","axios": "^0.19.0","core-js": "^3.4.3","crypto-js": "^3.1.9-1","moment": "^2.24.0","nprogress": "^0.2.0","vue": "^2.6.10","vue-router": "^3.0.3","vuex": "^3.0.1"},"devDependencies": {"@vue/cli-plugin-babel": "^4.1.1","@vue/cli-plugin-eslint": "^4.1.1","@vue/cli-service": "^4.1.1","@vue/eslint-config-standard": "^4.0.0","babel-eslint": "^10.0.1","babel-plugin-import": "^1.12.0","eslint": "^5.16.0","eslint-plugin-babel": "^5.3.0","eslint-plugin-vue": "^5.0.0","less": "^3.0.4","less-loader": "^4.1.0","lint-staged": "^9.4.3","vue-template-compiler": "^2.6.10","webpack-bundle-analyzer": "^3.4.1"},"gitHooks": {"pre-commit": "lint-staged"},"lint-staged": {"*.{js,vue}": ["vue-cli-service lint","git add"]},"repository": {"type": "git","url": "xxxxxxx"} }再看下package-lock文件里的內(nèi)容
{"name": "oss-frontend","version": "0.1.0","lockfileVersion": 1,"requires": true,"dependencies": {"@ant-design/icons": {"version": "1.1.16","resolved": "http://registry.npm.baidu-int.com/@ant-design%2ficons/-/icons-1.1.16.tgz","integrity": "sha1-rGQmIWk04/S8EI8vSPku1meJI14="},"@ant-design/icons-vue": {"version": "1.0.1","resolved": "http://registry.npm.baidu-int.com/@ant-design%2ficons-vue/-/icons-vue-1.0.1.tgz","integrity": "sha1-NDV5IZwEGQgxyco4Jq7HNhu4tNQ=","requires": {"ant-design-palettes": "^1.1.3","babel-runtime": "^6.26.0"}},"@babel/code-frame": {"version": "7.0.0","resolved": "http://registry.npm.baidu-int.com/@babel%2fcode-frame/-/code-frame-7.0.0.tgz","integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==","dev": true,"requires": {"@babel/highlight": "^7.0.0"}},"@babel/core": {"version": "7.7.5","resolved": "http://registry.npm.baidu-int.com/@babel%2fcore/-/core-7.7.5.tgz","integrity": "sha1-rhMjzQNbUWApMwf1BkfoP4umL34=","dev": true,"requires": {"@babel/code-frame": "^7.5.5","@babel/generator": "^7.7.4","@babel/helpers": "^7.7.4","@babel/parser": "^7.7.5","@babel/template": "^7.7.4","@babel/traverse": "^7.7.4","@babel/types": "^7.7.4","convert-source-map": "^1.7.0","debug": "^4.1.0","json5": "^2.1.0","lodash": "^4.17.13","resolve": "^1.3.2","semver": "^5.4.1","source-map": "^0.5.0"},"dependencies": {"@babel/code-frame": {"version": "7.5.5","resolved": "http://registry.npm.baidu-int.com/@babel%2fcode-frame/-/code-frame-7.5.5.tgz","integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==","dev": true,"requires": {"@babel/highlight": "^7.0.0"}}}} }package.json文件記錄你項(xiàng)目中所需要的所有模塊。當(dāng)你執(zhí)行npm install的時(shí)候,node會(huì)先從package.json文件中讀取所有dependencies信息,然后根據(jù)dependencies中的信息與node_modules中的模塊進(jìn)行對(duì)比,沒(méi)有的直接下載,已有的檢查更新(最新版本的nodejs不會(huì)更新,因?yàn)橛衟ackage-lock.json文件,下面再說(shuō))。另外,package.json文件只記錄你通過(guò)npm install方式安裝的模塊信息,而這些模塊所依賴(lài)的其他子模塊的信息不會(huì)記錄。
package-lock.json文件鎖定所有模塊的版本號(hào),包括主模塊和所有依賴(lài)子模塊。當(dāng)你執(zhí)行npm install的時(shí)候,node從package.json文件讀取模塊名稱(chēng),從package-lock.json文件中獲取版本號(hào),然后進(jìn)行下載或者更新。因此,正因?yàn)橛辛藀ackage-lock.json文件鎖定版本號(hào),所以當(dāng)你執(zhí)行npm install的時(shí)候,node不會(huì)自動(dòng)更新package.json文件中的模塊,必須用npm install packagename(自動(dòng)更新小版本號(hào))或者npm install packagename@x.x.x(指定版本號(hào))來(lái)進(jìn)行安裝才會(huì)更新,package-lock.json文件中的版本號(hào)也會(huì)隨著更新。
附:當(dāng)package.json與package-lock.json都不存在,執(zhí)行"npm install"時(shí),node會(huì)重新生成package-lock.json文件,然后把node_modules中的模塊信息全部記入package-lock.json文件,但不會(huì)生成package.json文件,此時(shí),你可以通過(guò)"npm init --yes"來(lái)初始化生成package.json文件。
總結(jié):
項(xiàng)目中引入的包版本號(hào)之前經(jīng)常會(huì)加^號(hào),每次在執(zhí)行npm install之后,下載的包都會(huì)發(fā)生變化,為了系統(tǒng)的穩(wěn)定性考慮,每次執(zhí)行完npm install之后會(huì)創(chuàng)建或者更新package-lock文件。該文件記錄了上一次安裝的具體的版本號(hào),相當(dāng)于是提供了一個(gè)參考,在出現(xiàn)版本兼容性問(wèn)題的時(shí)候,就可以參考這個(gè)文件來(lái)修改版本號(hào)即可。
總結(jié)
以上是生活随笔為你收集整理的package 与 package-lock文件的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: vim模式下报错E37: No writ
- 下一篇: python 进程