【问题标题】:Vendoring package which resides in another project's vendor folder位于另一个项目的供应商文件夹中的供应商包
【发布时间】:2018-11-17 00:43:50
【问题描述】:

我正在编写一个依赖于某些导入的库包,但我不确定如何正确处理它。

让我从目录结构开始:

go/src/github.com/
├── developer A/
│   ├── project 1
│   └── project 2
│   
└── developer B/
    └── project 3
        └── vendor
            └── project 4

项目 1 是一个库。它在项目 2 中使用并被拉入 2s 供应商文件夹。因此,项目 1 应包含其所有依赖项,以便客户端(例如项目 2)也不需要拉取它们。但是,项目 1 的一个依赖项是项目 4,它包含在项目 3 的供应商文件夹中。至关重要的是,此依赖项始终是项目 3 提供的版本。Go 不允许导入指向供应商文件夹内的包,因此我无法直接从那里导入它。我该如何通过 govendor 解决这个问题?

【问题讨论】:

  • 您控制项目 3 吗?通常,库不应该提供它们的依赖项——只有最终产品应该。库应改为使用 dep 或类似工具声明其依赖项。
  • 不,我不控制项目 3。我控制项目 1 和 2。我试图将项目 4 的相同版本拉入项目 2 的供应商文件夹,但这不起作用,因为 Go 认为这些是不同的类型,因为它们位于不同的存储库中。

标签: go govendor vendoring


【解决方案1】:

Go 不会让您进入另一个项目的供应商目录。听起来您的意图是确保版本。这就是go modules 的任务。请查看wiki 了解更多信息。

【讨论】:

  • 这看起来不错。但是,我现在卡在 Go 1.9.4 并且不能使用模块。
  • 使用glide或godep怎么样?
  • 这些也可以,但是我必须建议您考虑升级,因为当 go1.11 发布时不再支持 go1.9。我也倾向于谨慎对待非 go mod 的团队,因为这很可能是该领域的赢家。
猜你喜欢
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
  • 2016-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-28
相关资源
最近更新 更多