有同学提到说 package-lock.json 文件很容易产生冲突, 我们不妨先放下这个问题, 先来看看为什么我们需要 package-lock.json.
package-lock.json 简介
package-lock.json is automatically generated for any operations where npm modifies either the node_modules tree, or package.json. It describes the exact tree that was generated, such that subsequent installs are able to generate identical trees, regardless of intermediate dependency updates.
以上摘自官方文档, 义译一下就是
package-lock.json 会在 npm 更改 node_modules 目录树或者 package.json 时自动生成的. 它准确的描述了当前项目 npm 包的依赖树, 并且在随后的安装中会根据 package-lock.json 来安装, 保证是相同的一个依赖树, 不考虑这个过程中是否有某个依赖有小版本的更新.
这里有个很重要的点就是, package-lock.json 记录的是一个依赖树, 而不是你直接在 package.json 中的依赖项. 和直接在 package.json 中锁死版本不一样的地方在于, package.json 中只是锁死了依赖项的版本, 而没有锁死依赖项的依赖的版本, 这里就是变数的地方. 如果不对整个依赖树做锁定, 那前后编译出来的应用版本可能是不一样的, 有可能开发时能正常工作, 而到了线上却不能工作.
所以很明显的 package-lock.json 是很符合我们的诉求的. 我们需要让后面每一次 install 都是相同的版本, 打出来的包都有着相同的依赖, 这对于我们项目的稳定性, 前后一致性是非常重要的.
如何解决 package-lock 的冲突呢?
不要试图删除 package-lock.json 来解决一些问题, 这样会破坏 package-lock.json 的作用.
package-lock 是工具自动生成的一个文件内容, 对于这种自动生成的文件最好的办法还是交由工具去处理, 而不是手工一个一个的去处理产生的冲突.
在开发过程中, 合并的时候如何如果出现了冲突, 在 merge conflicts 的阶段, 只需要从主分支中 checkout 去 package-lock.json, 再以此为基础, 重新安装新分支中需要的依赖.
- git checkout dev -- package-lock.json;
- npm install lodash --save;
这样让 npm 自动的去维护 package-lock.json. 当然上面的步骤同样也适用于 rebase 过程.
我相信这个办法可以很好的解决 package-lock.json 冲突的问题, 并且团队合作中, 做 merge 或者 rebase 操作的人可以通过查看 package.json 的变更知道新安装了哪些依赖包, 来重新安装, 也可以很好的解决这个问题.
来源: http://www.jianshu.com/p/1d2e2f8c9ab2