我正在编写一个应用程序并导入一些包B
。这个包有vendor
目录,其中又包含包C
。我也想用那个包C
直接在我的应用程序中。
所以我决定使用glide
包管理器。它同时下载B
and C
into myapp/vendor
目录,但保留myapp/vendor/B/vendor/C
里面。因此,当我构建我的应用程序时,它使用两个不同版本的 C 构建(也使用myapp/vendor/C
).
如何避免这种情况?
1)要么有一个包管理器可以处理这个问题吗?govend
似乎与它的--prune
争论,但它不尊重这些版本C
包。
2)或者,如何制作glide
正确处理嵌套vendor
目录?
Edit
我的例子是https://github.com/orloffm/flat
。它用cat
以及 - 间接 -toy
包。cat
有一些旧版本 of 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
我不想嵌套vendor
目录与toy
.
我能够安装并运行你的flat
通过进行以下更改来计划(还向您发送了 PRhttps://github.com/orloffm/flat/pull/1 https://github.com/orloffm/flat/pull/1):
1) flat.go 需要导入“github.com/orloffm/toy”,因为new(toy.RubberToy)
- 否则无法编译
2) add glide.yaml
将“cat”和“toy”库列为依赖项的文件:
package: github.com/orloffm/flat
import:
- package: github.com/orloffm/cat
- package: github.com/orloffm/toy
3) run 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.
我认为最好的是not包括vendor
目录到你的图书馆- 这会使事情变得混乱,并使图书馆用户的生活变得更加困难(例如,需要记住使用其他选项来glide
)。让这些图书馆的“客户”——package main
包 - 要么提供所有依赖项(包括传递依赖项),要么在配置中指定它们,例如glide.yaml
并让工具(滑动)正确获取并安装它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)