扁平化主要依赖的供应传递依赖
Flatten vendored transitive dependencies of primary dependency
我一直在通过 Glide, to using the Go 1.11.x module support 将现有项目从使用 vendored 依赖项转换。但是我在一个项目中使用我无法解决的 mod 规则遇到了一个特殊情况。
内部项目 'foo' 的依赖项通过 "go mod vendor" 出售:
projects/src/foo/
main.go
vendor/
...
这在内部构建项目时效果很好,因为非 go 开发人员可以将项目克隆到任何位置并构建它,无需外部代理访问即可下载依赖项。
现在我正在尝试允许项目 'bar' 使用库 'foo' 构建工具。
package bar
import "internal.com/project/foo"
"go.mod" 文件仅包含:
module internal.com/project/bar
require 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 module 支持并不关心扁平化供应商的瞬态依赖性。
以前使用 glide
作为包管理器时,它会从内部 git 存储库中获取 'foo',然后将其所有依赖项扁平化到我的供应商目录中。
最初作为 question to golang-nuts 发布,没有回复。
它目前不能那样工作,只使用顶级供应商目录。来自 modules help:
To build using the main module's top-level vendor directory to satisfy
dependencies (disabling use of the usual network sources and local
caches), use 'go build -mod=vendor'. Note that only the main module's
top-level vendor directory is used; vendor directories in other
locations are still ignored.
对于这个特定的用例,我建议等到 go modules
成熟。
我一直在通过 Glide, to using the Go 1.11.x module support 将现有项目从使用 vendored 依赖项转换。但是我在一个项目中使用我无法解决的 mod 规则遇到了一个特殊情况。
内部项目 'foo' 的依赖项通过 "go mod vendor" 出售:
projects/src/foo/
main.go
vendor/
...
这在内部构建项目时效果很好,因为非 go 开发人员可以将项目克隆到任何位置并构建它,无需外部代理访问即可下载依赖项。
现在我正在尝试允许项目 'bar' 使用库 'foo' 构建工具。
package bar
import "internal.com/project/foo"
"go.mod" 文件仅包含:
module internal.com/project/bar
require 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 module 支持并不关心扁平化供应商的瞬态依赖性。
以前使用 glide
作为包管理器时,它会从内部 git 存储库中获取 'foo',然后将其所有依赖项扁平化到我的供应商目录中。
最初作为 question to golang-nuts 发布,没有回复。
它目前不能那样工作,只使用顶级供应商目录。来自 modules help:
To build using the main module's top-level vendor directory to satisfy dependencies (disabling use of the usual network sources and local caches), use 'go build -mod=vendor'. Note that only the main module's top-level vendor directory is used; vendor directories in other locations are still ignored.
对于这个特定的用例,我建议等到 go modules
成熟。