Mik*_*lov 7 package-managers go
我正在编写一个应用程序并导入一些包B.这个包的vendor目录里面包含了包C.我也想C直接在我的应用程序中使用该包.
所以我决定使用glide包管理器.这两种下载B和C进入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有一些旧版本的toyvendored并提交到存储库.我这样做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
Run Code Online (Sandbox Code Playgroud)
我不希望有嵌套vendor目录toy.
我能够flat通过进行以下更改来安装并运行您的程序(还向您发送了 PR https://github.com/orloffm/flat/pull/1):
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
Run Code Online (Sandbox Code Playgroud)
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 生成
Cat pushes the toy.
The toy makes a very loud noise.
Run Code Online (Sandbox Code Playgroud)
我认为最好的方法是不要将该vendor目录包含到您的库中- 这会使事情变得混乱并使库用户的生活变得更加困难(例如,需要记住使用附加选项glide)。让这些库的“客户端” -package main包 - 要么提供所有依赖项(包括传递依赖项),要么在配置中指定它们,例如glide.yaml并让工具(glide)正确获取和安装它们。
| 归档时间: |
|
| 查看次数: |
1720 次 |
| 最近记录: |