`gomodvendor`命令的目的是什么?

该文件说,

go mod vendor 命令在主模块的根目录中构造一个名为 vendor 的目录,该目录包含支持主模块中包的构建和测试所需的所有包的副本。不包括仅通过主模块之外的包测试导入的包。

golangbyexample说:

您还可以将供应商目录签入您的 VCS(版本控制系统)。这在某种意义上变得有用,因为在运行时不需要下载任何依赖项,因为它已经存在于签入 VCS 的供应商文件夹中

我认为模块 ( go.mod, go.sum) 负责版本控制。我也认为只有在我第一次运行程序时才会下载依赖项。

那么,这个命令go mod vendor有什么用呢?它的目的或用例是什么?

回答

Go Modules 负责版本控制,但不一定负责模块从 Internet 上消失或 Internet 不可用。如果模块不可用,则无法构建代码。

Go Proxy 会通过镜像模块在一定程度上缓解消失的模块,但它可能不会一直对所有模块都这样做:

为什么以前可用的模块在镜像中变得不可用?

proxy.golang.org 不会永远保存所有模块。造成这种情况的原因有很多,但一个原因是 proxy.golang.org 无法检测到合适的许可证。在这种情况下,只有模块的临时缓存副本可用,如果从原始源中删除并过时,则可能会变得不可用。校验和仍将保留在校验和数据库中,无论它们是否在镜像中变得不可用。

查看更多:https : //proxy.golang.org/

另一种方法是 fork 模块并使用Go Modulesreplace指令,该指令允许将导入路径重定向到文件中的另一个路径,例如您的 fork,go.mod而无需更改您的代码。这种方法由colm.anseo提供。

关于 Internet 访问,如果您运行一个大型服务器群并且需要在多台机器上运行代码,那么从 Internet 下载到您场中的每台机器可能效率低下并且存在安全风险。使用go mod vendor内部存储库并复制它可能会更有效率。大公司使用内部方法将代码部署到其数据中心的多台服务器上。

  • 您还可以分叉关键的 3rd 方存储库的副本(如果不再维护等)。您的导入仍然可以参考互联网版本 - 但您可以使用 `go.mod` [replace 指令](https://golang.org/ref/mod#go-mod-file-replace) 重定向到您的分叉在构建期间复制。`replace` 指令也可以指向本地目录。

以上是`gomodvendor`命令的目的是什么?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>