gpt4 book ai didi

go - 如何处理 Go 包中嵌套的 "vendor"目录?

转载 作者:IT王子 更新时间:2023-10-29 01:15:20 26 4
gpt4 key购买 nike

我正在编写一个应用程序并导入一些包 B。此包具有 vendor 目录,其中又包含包 C。我还想直接在我的应用程序中使用该包 C

所以我决定使用glide 包管理器。它将 BC 下载到 myapp/vendor 目录中,但保留 myapp/vendor/B/vendor/C 里面。因此,当我构建我的应用程序时,它使用两个不同版本的 C(也使用 myapp/vendor/C)构建。

如何避免这种情况?

1) 或者,是否有处理该问题的包管理器? govend 似乎使用其 --prune 参数,但它不尊重这些 C 包的版本。

2) 或者,如何让 glide 正确处理嵌套的 vendor 目录?

编辑

我的例子是https://github.com/orloffm/flat。它使用 cat 和 - 间接地 - toy 包。 cat 有一些 旧版本toy 出售并提交到存储库中。我执行 glide create && glide install 并以这个结束:

.
├── flat.go
├── glide.lock
├── glide.yaml
└── vendor
└── github.com
└── orloffm
├── cat
│   ├── cat.go
│   ├── vendor
│   │   └── github.com
│   │   └── orloffm
│   │   └── toy
│   │   └── toy.go
│   └── vendor.yml
└── toy
└── toy.go

我不想在 toy 中嵌套 vendor 目录。

最佳答案

通过进行以下更改(还向您发送了 PR https://github.com/orloffm/flat/pull/1),我能够安装并运行您的 flat 程序:

1) flat.go 需要导入 "github.com/orloffm/toy"因为 new(toy.RubberToy) - 否则它不会编译

2) 添加 glide.yaml 文件,将“cat”和“toy”库列为依赖项:

package: github.com/orloffm/flat
import:
- package: github.com/orloffm/cat
- package: github.com/orloffm/toy

3) 运行 glide install --strip-vcs --strip-vendor(或等效的快捷方式 glide install -s -v)来安装包并删除嵌套vendor/ 目录(我正在使用 glide 版本 0.11.0-dev 安装 go get -u github.com/Masterminds/glide; glide install -- help 显示了 --strip-vendor 选项。

4) GOBIN=$PWD go install && ./flat produces

Cat pushes the toy.
The toy makes a very loud noise.

我认为最好的办法是不要vendor目录包含到您的中——这会把事情搞砸,让生活变得更加困难库用户(例如,需要记住使用附加选项来 glide)。让这些库的“客户”——package main packages——要么提供所有依赖项(包括可传递的依赖项),要么在配置中指定它们,例如 glide.yaml 和让工具(滑动)正确获取和安装它们。

关于go - 如何处理 Go 包中嵌套的 "vendor"目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38597046/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com