如何锁定包管理器的嵌套依赖项版本?

时间:2016-02-05 10:39:05

标签: version-control version dependency-management package-managers

今天我体验到不在Git中存储依赖关系的良好做法会让我苦苦挣扎。

我有bower.json文件,我已设置固定版本号以避免意外更新。例如,

"angular-google-maps": "angular-ui/angular-google-maps#2.2.1"

但我忘记了库可能有嵌套的依赖项,我无法控制它们。

所以,今天我的构建破了,因为angular-google-maps中的lodash被指定为"lodash": ">=3.8.0"。 最初我有3.10.1版本几个月左右。但是在克隆了一个干净的副本并运行我的构建脚本之后,安装了lodash版本4.2.1。在新版本中,文件夹结构已更改,因此我的构建已损坏。

这次修复很简单 - 只需调整我的路径即可。但可能会出现更糟糕的情况。例如,某些库可能有一个旧的bug,我可能有自定义代码可以解决这个bug。然后使用错误修复程序更新库,bower获取新库,并且我的解决方法在最好情况下是多余的,或者在最坏的情况下会导致严重损坏。

我不确定,将来如何避免这种情况。我真的不想遍历所有递归依赖项并将它们添加到我的bower.json,package.json等作为固定版本号。那太疯狂了。应该有一些自动化工具。好吧,作曲家有.lock,但我不确定它是否也锁定了嵌套的依赖。

另一个问题是构建一致性。让我们说,我们有一个版本标签为1.2.3的主分支。当我签出这个标签并收集所有依赖项时,我希望总能得到相同的结果代码,但事实并非如此。这意味着我无法将相同的代码提供给生产。我必须在某处缓存我的构建,以确保相同的代码可用。

其他开发者如何应对此问题?是否有任何替代方法可以将所有依赖项提交到Git中?

0 个答案:

没有答案