【问题标题】:How to add local dependency to vendor when using go mod使用 go mod 时如何向供应商添加本地依赖项
【发布时间】:2019-05-04 10:51:44
【问题描述】:

之前我用go dep,现在office确保官方工具是go mod

当我使用go dep 时,我可以将本地依赖包添加到供应商和Gopkg.toml 中的ignored 以忽略从repo 搜索包。我可以正常执行go dep update

现在我使用go mod,我还将本地依赖包添加到vendor,并在go.mod中添加exclude。但是当我执行go mod tidy 时,即使我的项目存在import xxx,它也会删除包。

我做了什么:

  1. 创建新项目
  2. 执行 go mod init
  3. 修改 go.mod exclude privaterepo.com/bb/bb

  4. 将我的本地模块复制到供应商,因为本地模块位于不支持 https 的私有仓库上。

  5. 现在供应商就像:

    vendor |-github.com/aa/aa |-privaterepo.com/bb/bb

  6. 导入“privaterepo.com/bb/bb”
  7. 执行 go build -mod vendor
  8. 比我得到错误 “找不到路径 privaterepo.com/bb/bb 的模块” 9 总是尝试用replace,但也不管用

那么,我应该怎么做才能将本地包添加到供应商并避免go mod删除它?

【问题讨论】:

  • 你试过go mod vendor吗?
  • 什么是“本地包”?所有的包都是平等的。
  • @ttomalak 如果我不执行go mod vendor,它就不会创建供应商文件夹。
  • @Volker 我的意思是我的私人仓库中的包,它不支持 https 并且需要身份验证。所以唯一的方法是我 git clone 使用 ssh 而不是我将包复制到供应商。如vendor/xxx.com/xxx/xx。
  • 好的,明白了。但我还是不明白这个问题。你能更清楚地描述这个问题吗?

标签: go vendor go-modules


【解决方案1】:

那么,我应该怎么做才能将本地包添加到供应商并避免 go mod 删除它?

嗯,我认为你不能这样做。这不是它的工作方式。 go mod vendor管理您的供应商文件夹。

而不是excludeing 你从 go.mod 打包你应该添加一个 replace 指令来指示 go 工具不是从 privaterepo.com 而是从本地文件系统查找包。引用自https://github.com/golang/go/wiki/Modules#when-should-i-use-the-replace-directive

replace 也可用于通知 go 工具在多模块项目中模块的相对或绝对磁盘位置,例如:

   replace example.com/project/foo => ../foo

所以在你的情况下:不要尝试手动将 privaterepo.com/bb/bb 放入 vendor 中,而是将它放在当前项目之外的某个地方并使用

replace privaterepo.com/bb/bb => ../bb

然后让go mod 将这些内容从文件系统复制到您的供应商。

【讨论】:

  • 我已经阅读了模块 wiki,并且我知道我可以将 privaterepo.com/bb/bb 复制到外部供应商文件夹,如果我这样做我也不需要在 go.mod 中添加 replace privaterepo.com/bb/bb => ../bb。但是exclude 是什么意思,我什么时候应该使用exclude?我更喜欢在供应商中管理我的私人回购,就像其他公共回购一样。
  • @yanyandenuonuo exclude 用于排除模块的特定版本,如果您知道此版本已损坏/不适用于我们的代码。在这种情况下,您可以将此版本标记为已排除,并且在版本选择期间不会选择此版本。对于第二部分:如果您使用模块和 go mod 管理您的构建,那么您必须采用您的工作流程来进行 mod。
  • 也许我应该在 golang 问题上问这个问题。我不认为exclude 用于排除特定版本,因为require 已经声明了该版本。无论如何,非常感谢您的回答。
  • @yanyandenuonuo exclude 用于从可能的集合中排除单个版本,require 用于选择单个固定版本。如果不确定,请再次查看文档。
  • 知道了,但我不认为这是关于exclude 的正确事情,我对此提出了问题。再次感谢您。
猜你喜欢
  • 2016-11-22
  • 2013-09-03
  • 2019-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多