1. package-lock.json 是什么?
在多人协作开发的时候,我们虽然有packages.json文件,可以帮助我们统一管理第三方库,但也会存在特殊情况。
问题:小A新建项目 使用了jquery (npm i jquery
)最新的版本(@3.3.0),第二天领导让小B参加帮助小A一起开发。当小B 克隆下来项目后 执行npm install
但是jq的作者昨晚更新的一个小版本(@3.3.1),由于作者粗心然后这两个版本不兼容。小B无法运行项目。
解决:npm@5.x.x以后 在安装库的时候会自动生成package-lock.json
文件
(可以从.npmrc设置package-lock = false,取消但并不建议你这么做) package-lock.json
文件就是解决上面遇到的问题,它可以帮助我们统一版本,所以git提交的时候请不要忽略它
官方的话:将其作为捕获在任意时刻安装的确切依赖树的机制。
每个人都为项目的特定版本获取依赖项以得到同一棵依赖树。(有package-lock.json文件大家安装的依赖树都是一样的,node_modules大小,文件数都是相同的)
注意: 请不要手动修改package-lock.json或package.json文件,否则npm无法保证依赖树是最新的
2. package-lock.json中有哪些东西
{
"name": "admin", // 当前项目名称
"version": "1.0.0", // 当前版本号
"lockfileVersion": 1, // *锁定文件版本
"requires": true, //
"dependencies": {
"element-ui": { // 包名
"version": "2.13.2",
"resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.13.2.tgz",
"integrity": "sha512-r761DRPssMPKDiJZWFlG+4e4vr0cRG/atKr3Eqr8Xi0tQMNbtmYU1QXvFnKiFPFFGkgJ6zS6ASkG+sellcoHlQ==",
"requires": { // element-ui 又依赖了哪些包
"async-validator": "~1.8.1",
"babel-helper-vue-jsx-merge-props": "^2.0.0",
"deepmerge": "^1.2.0",
"normalize-wheel": "^1.0.1",
"resize-observer-polyfill": "^1.5.0",
"throttle-debounce": "^1.0.1"
}
},
}
}