使用package-lock.json的工作流程

时间:2017-07-11 16:13:42

标签: javascript npm workflow

好的,所以我的工作中有一个npm项目,我们很多人都在努力。它依赖于'lodash'和'jquery'。

我做了一个>npm install,它拉下了我的deps。然后我捆绑它。

在我的系统上创建一个'package-lock.json'。

现在,另一位开发人员在'时刻'上添加了新的依赖项。

他做了>npm install -S moment

将它添加到他的package.json中,然后检查它。我们不检查package-lock.json。

现在我做一个'git pull'并获得新的package.json。

现在我做>npm install,但因为我有自己的package-lock.json,它并没有为我安装'时刻'。所以现在我必须:

>rm package-lock.json
>npm install

现在我有'时刻'。看起来像这样的package-lock.json并没有真正帮助我的工作流程。如果我们都在一个通用的npm模块上开发,我能否解释一下这对日常开发人员应该如何运作?

1 个答案:

答案 0 :(得分:0)

首先,根据npm documentation

  

此文件旨在提交到源存储库

所以你应该在完成package-lock.json之后提交初始npm install

另一位开发人员会提取您的更改,包括锁定文件。

然后他npm -S moment package.json,对package-lock.jsonnpm install进行更新。开发人员通过这些更改推送提交。

现在你拉出他的变化并做moment。它应该为您安装moment。此外,你们现在应该拥有完全相同版本的package-lock.json并安装它的依赖项 - 即使他和你的安装之间的某些依赖项的次要版本增加了。

合并冲突

当你们两个并行安装新的依赖项然后在package.json上发生冲突时,一切都变得混乱。这可能是一个巨大的文件,手动合并相当痛苦。我没有看到记录任何官方处理它的方式。甚至还有一个open issue in npm repo来解决冲突。

一位用户在其中的问题主题中分享了他的workaround workflow,这基本上意味着:通过从主服务器中提取package-lock.jsonnpm install -S覆盖您的本地更改,然后应用所有npm remove -S }和INSERT INTO JOB_HISTORY VALUES(200001, ('1970/10/01'), ('2035/09/30'), 'IT3', 1003); 命令再次。在npm解决问题之前,这似乎是一个合理的解决方案。