微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 monorepo 环境中发布 go 模块

如何解决在 monorepo 环境中发布 go 模块

假设我有一个 monorepo 并且有几个单独的 golang 服务:

root    
└── services
        ├── svc1
        │   ├── go.mod
        │   ├── go.sum
        │   └── main.go
        └── svc2
            ├── go.mod
            ├── go.sum
            └── main.go

而 svc2 将来将依赖于 svc1。另外要求svc1和svc2可以单独释放。

有没有办法单独发布模块? go mod 文档只假设只有 repo,所以它不提供这种灵活性。

解决方法

它应该可以正常工作。

module path 由存储库根目录(即 VCS 中的根目录)和模块路径组成,如果(引用)“该模块未在存储库的根目录中定义” em>.

因此,使用示例中给出的目录树,您可以添加 svc1 的 go.mod

  • module github.com/root/services/svc1

并在 svc2 的 go.mod

  • module github.com/root/services/svc2

参考:https://golang.org/ref/mod#vcs-dir

,

要标记存储库子目录中模块的发布版本,请将子目录添加为标记的前缀,例如 svc1/v0.1.0

每个https://golang.org/ref/mod#vcs-version

如果在存储库中的子目录中定义了一个模块……,那么每个标签名称必须以模块子目录为前缀,后跟斜杠。例如,模块 golang.org/x/tools/gopls 定义在存储库的 gopls 子目录中,根路径为 golang.org/x/tools。该模块的版本 v0.4.0 必须在该存储库中具有名为 gopls/v0.4.0 的标记。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。