为了账号安全,请及时绑定邮箱和手机立即绑定

扁平化主要依赖的供应传递依赖

扁平化主要依赖的供应传递依赖

Go
皈依舞 2023-04-17 15:24:29
我一直在将现有项目从通过Glide使用 vendored 依赖项转换为使用 Go 1.11.x模块支持。但是我在一个项目中使用我无法解决的模块遇到了一个特殊情况。内部项目“foo”通过“go mod vendor”提供其依赖项:projects/src/foo/    main.go    vendor/        ...这在内部构建该项目时非常有效,因为非 Go 开发人员可以将项目克隆到任何位置并构建它,而无需外部代理访问来下载依赖项。现在我试图让项目“bar”使用库“foo”构建一个工具。package barimport "internal.com/project/foo"“go.mod”文件仅包含:module internal.com/project/barrequire internal.com/project/foo v0.0.0-...我会通过以下方式供应商:go module vendor我通过以下方式构建:go build -mod=vendor我所看到的是,“foo”将从内部 git 存储库中克隆,并且其所有依赖项将从其远程 git 来源下载,并且我的“go.sum”文件将使用所有临时依赖项进行更新。但我真正想要的是只从我的内部网络获取“foo”并让它扁平化供应商的依赖项。理想情况下,不应有外部 http 请求。这可能吗?“-mod=vendor”标志在直接构建项目“foo”时非常有用。但它似乎并不适用于此,因为项目“bar”不想供应商。它想要获得一个主要依赖项,就是这样。看起来 Go 模块支持并不关心扁平化供应商的瞬态依赖性。以前用作glide包管理器时,它会从内部 git 存储库中获取“foo”,然后将其所有依赖项扁平化到我的供应商目录中。最初作为问题发布到 golang-nuts,没有回复。
查看完整描述

1 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

它目前不能那样工作,只使用顶级供应商目录。从模块帮助:

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

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


查看完整回答
反对 回复 2023-04-17
  • 1 回答
  • 0 关注
  • 68 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信