扁平化主要依赖关系的转移依赖性

jdi*_*jdi 6 go go-modules

我一直在将现有项目从使用Glide的 vendored依赖项转换为使用Go 1.11.x 模块支持.但我在一个项目中使用我无法解决的模块遇到特定情况.

内部项目'foo'通过"go mod vendor"销售其依赖项:

projects/src/foo/
    main.go
    vendor/
        ...
Run Code Online (Sandbox Code Playgroud)

这在内部构建项目时非常有用,因为非开发人员可以将项目克隆到任何位置并构建它,而不需要外部代理访问来下载依赖项.

现在我试图让项目'bar'使用库'foo'构建一个工具.

package bar

import "internal.com/project/foo"
Run Code Online (Sandbox Code Playgroud)

"go.mod"文件仅包含:

module internal.com/project/bar

require internal.com/project/foo v0.0.0-...
Run Code Online (Sandbox Code Playgroud)

我会供应商通过:

go module vendor
Run Code Online (Sandbox Code Playgroud)

我通过以下方式构建:

go build -mod=vendor
Run Code Online (Sandbox Code Playgroud)

我所看到的是'foo'将从内部git repo克隆,并且它的所有依赖项将从它们的远程git起源下载,并且我的'go.sum'文件将使用所有瞬态依赖项进行更新.但我真正想要的只是从我的内部网络中获取'foo'并让它平整销售的依赖关系.理想情况下,应该没有外部http请求.

这甚至可能吗?直接构建项目"foo"时,"-mod = vendor"标志非常有用.但它似乎并不适用于此,因为项目"bar"不希望供应商.它希望获得一个主要的依赖关系,就是这样.似乎Go模块支持并不关心扁平化出售的瞬态依赖性.

以前当glide用作包管理器时,它会从内部git repo中获取'foo',然后将其所有依赖项展平到我的vendor目录中.

最初发布的问题是golang-nuts,没有回复.

nij*_*ijm 1

目前它无法以这种方式工作,仅使用顶级供应商目录。从模块帮助

要使用主模块的顶级供应商目录进行构建以满足依赖关系(禁用通常的网络源和本地缓存),请使用“go build -mod=vendor”。请注意,仅使用主模块的顶级供应商目录;其他位置的供应商目录仍然被忽略。

对于这个特定的用例,我建议等到go modules成熟。