【发布时间】:2016-07-26 18:10:29
【问题描述】:
我正在编写一个应用程序并导入一些包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 有一些 旧版本 的 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 嵌套在一起。
【问题讨论】:
-
我现在不用
glide,但你确定你有最新版本吗?只需快速浏览一下文档即可显示"Because of this Glide flattens the dependency tree into a single top level vendor/ directory." -
正如 JimB 所说,我使用的大多数当前供应商工具都会自动扁平化依赖关系树。这实际上是必需的,因为从两个不同的唯一路径导入的同一个包实际上被认为是两个不同的唯一包,正如您所发现的。我知道
govendor默认会这样做。 -
@Kaedys +1 为州长。我在很多项目中都使用过它。
-
扁平化供应商目录确实是一项核心滑翔功能;您能否还包括您正在使用的确切滑翔调用以及您的配置文件的样子?
-
@SamWhited 是
https://github.com/orloffm/flat。它使用cat,间接使用toy。但是cat有一些旧版本的toy已售卖。我做glide create和glide install并得到vendor/cat/vendor/toy。
标签: go package-managers