我一直在将现有项目从使用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,没有回复.