首页 > 解决方案 > 使用 go mod 时如何向供应商添加本地依赖项

问题描述

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

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

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

我做了什么:

  1. 创建新项目
  2. 执行 go mod init
  3. 修改 go.modexclude 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 总是尝试替换,但它也不起作用

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

标签: govendorgo-modules

解决方案


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

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

而不是exclude从 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 放在供应商中,而是将它放在当前项目之外的某个地方并使用

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

并让go mod这些东西从文件系统复制到您的供应商。


推荐阅读