Seb*_*020 2 go dependency-management vendoring go-modules
想象一下您有一个项目需要两个模块A和B。我将调用项目模块P。可以说,这P需要A v1.0.0,B v1.1.0那A需要B v1.0.0。此外,B没有遵守语义版本控制规则,因此版本更改v1.0.0 -> v1.1.0引入了破坏性 API 更改。因此
P,仅使用 构建并且v1.1.0仅A使用 构建v1.0.0。
依赖关系图:
P -> A (v1.0.0) -> B(v1.0.0)
P -> B (v1.1.0)
Run Code Online (Sandbox Code Playgroud)
有没有办法用不同的版本构建这个项目。我听说过供应商,但我不确定这是否会导致依赖项使用不同的B模块版本。
如果它可以为冲突的包版本提供解决方案,那么如果依赖项在其 git 存储库中不包含供应商文件夹(有些人说,您不应该上传供应商文件夹),那么 go 工具是否可以使用供应商识别模块(在此case 模块A不附带供应商文件夹,但开发人员在go mod vendor本地调用),go get 命令是否尊重依赖项的供应商文件夹(或者它是否可以检测到模块使用了供应商而没有上游供应商文件夹)?
这似乎是模块系统无法解决的冲突。由于 Go 使用语义版本控制,它将尝试让 B v1.1.0 来解决这两个依赖关系,然后如果 A 无法与 B 1.1.0 一起工作,则构建将中断。
解决这个问题的最佳方法是通过不破坏非主要版本中的 API 来修复 B。
如果缺少这一点,您可以将B 分叉成一个单独的模块(具有与原始 B 不同的模块名称)并在 A.Create 中使用旧版本BFORK=Bv1.0.0,然后您将拥有:
P -> B (v1.0.0)
A -> BFORK vX.X.X
Run Code Online (Sandbox Code Playgroud)