【问题标题】:How to prevent from `go build` to update the latest version of modules如何防止`go build`更新最新版本的模块
【发布时间】:2020-10-15 01:07:36
【问题描述】:

我在一个大型项目中使用了一个名为“yaegi”的开源项目。

我需要使用旧版本的“yaegi”:v.0.8.11,所以我修改了go.mod文件并将:
github.com/traefik/yaegi v0.9.2 // indirect替换为github.com/containous/yaegi v0.8.11
但是当我构建项目时,它会开始更新所有模块并将其替换回最新版本:

root@ubuntu:~/myproj1# go build main.go
go: finding module for package github.com/traefik/yaegi/stdlib/unsafe
go: finding module for package github.com/traefik/yaegi/stdlib
go: finding module for package github.com/traefik/yaegi/interp
go: found github.com/traefik/yaegi/interp in github.com/traefik/yaegi v0.9.2

如何防止它并使用旧版本v.0.8.11保留它?
read那根据https://tip.golang.org/cmd/go/#hdr-Maintaining_module_requirements

go 命令本身会自动更新go.mod 文件以保持require 语句的标准格式和准确性。

任何找到不熟悉的导入的 go 命令都会查找包含该导入的模块,并自动将该模块的最新版本添加到 go.mod。 […]

任何 go 命令都可以确定缺少模块要求并且必须添加 […]。

也许有办法绕过它?

【问题讨论】:

    标签: go go-build


    【解决方案1】:

    go.mod 中的//indirect 表示您要导入的其他模块中至少有一个依赖于该版本的模块,因此go build 将自动更新该模块,无论您如何更改该行go.mod。在您的情况下,如果您不想使用 v0.9.2yaegi 模块,您必须首先从项目中摆脱依赖于该模块的其他依赖项,然后修复您的 go.mod 以使您的项目需要 @987654328 @。您可以删除它们或通过使用它们的旧版本或编辑它们的源代码使它们需要早期版本的yaegi。另外,我不会直接编辑go.mod,而是运行go get -v github.com/containous/yaegi@0.8.11 之类的东西来签出模块的特定版本。

    【讨论】:

      猜你喜欢
      • 2019-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 2018-03-19
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      相关资源
      最近更新 更多