go - 使用 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
。
我做了什么:
- 创建新项目
- 执行 go mod init
修改 go.mod
exclude privaterepo.com/bb/bb
将我的本地模块复制到供应商,因为本地模块位于不支持 https 的私有仓库上。
- 现在供应商就像:
vendor |-github.com/aa/aa |-privaterepo.com/bb/bb
- 导入“privaterepo.com/bb/bb”
- 执行 go build -mod vendor
- 比我得到错误“找不到路径 privaterepo.com/bb/bb 的模块” 9 总是尝试替换,但它也不起作用
那么,我应该怎么做才能将本地包添加到供应商并避免go mod
将其删除?
解决方案
那么,我应该怎么做才能将本地包添加到供应商并避免 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
这些东西从文件系统复制到您的供应商。
推荐阅读
- ios - Apple 系统字体大小(例如正文、标注、标题等)的预览?
- php - 返回选择字段 laravel Nova 中的所有表行
- javascript - Firebase + Socket.io。这有意义吗?
- msal - 在 iOS 单元测试 XCTestCase 中创建 MSALPublicClientApplication 对象的错误
- json - 想要创建 Visual Studio Snippets 但它给出了错误
- ember.js - Ember 中有没有办法根据 ember8013 之类的 div id 获取组件/视图/路由?
- matlab - 像素到区域的转换无法在 Matlab im2bw 中正常工作
- javascript - 没有 iFrame 的 Google 地图方向按钮
- java - 是否需要手动销毁和关闭 java.lang.Process 的打开流?
- html - HTML 媒体查询最小值和最大值