如何解决是否可以禁止导入具有多个独立模块的模块mono-repo?
我本质上拥有的是单一存储库,它在根级别没有 go.mod
。这个 mono-repo 中有多个目录,每个目录都有自己的 go.mod
文件。我将它们称为 sub-modules
。
现在,我已经找到了一种能够在完全不同的代码库中独立(版本化)访问子模块的方法。我现在面临的问题是,禁止导入整个单一存储库,使用:
go get link.to/mono-repo@commit_id
------> A
并且只允许使用 :
导入go get link.to/mono-repo/sub_mod1@v0.x.y
go get link.to/mono-repo/sub_mod2@v0.y.z
命令 A
能够获取整个 repo,然后可以用于访问内部模块。有什么办法可以阻止这被允许吗?
我尝试了一些方法,例如:
- 在根级别的文件
noCompile.go
中添加了不可编译的代码。在go get...
上,会打印编译错误,但使用内部模块仍然可以正常工作。 - 在同一个
init()
文件中添加了一个noCompile.go
函数,该函数仅调用panic()
。这个 init 函数没有被执行,因为根目录从不直接访问,只有内部模块。
有什么方法可以实现我的意图吗?
解决方法
任何包含其自己的 go.mod
文件的目录都被排除在父目录中的模块之外。因此,如果您go get link.to/mono-repo@commit_id
,那应该不包含包 link.to/mono-repo/sub_mod1
或 link.to/mono-repo/sub_mod2
(假设它们存在并拥有自己的 go.mod
文件)。
我怀疑您观察到像 import "link.to/mono-repo/sub_mod2/some/package/here"
这样的导入不是因为最初的 go get
,而是因为 go
命令正在解决丢失的导入(并添加丢失的依赖项) ) 自动地;见https://golang.org/ref/mod#go-mod-file-updates。
从 Go 1.16(今天发布!)开始,大多数 go
命令不再隐式修改 go.mod
文件,因此 repo root 中的模块不包含嵌套模块的内容希望应该更清楚。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。