【问题标题】:Go modules and dependencies with modified vendors修改供应商的 Go 模块和依赖项
【发布时间】:2019-08-28 01:52:07
【问题描述】:

我正在尝试将一个 Go 项目转换为新的模块标准,但我遇到了一个依赖项的问题。

该存储库提供了一个库(在本例中为 golang.org/x/net/html)以向该库添加一些功能;这意味着它已经修改了 vendored 依赖项(向结构添加了一个方法)。

所以问题是,在执行go mod init 之后,当我执行go get ./... 时,系统会抱怨调用了该添加的功能,因为它忽略了修改后的供应商并尝试导入上游库。

有没有办法让go mod 知道它应该使用 vendored 依赖项?

【问题讨论】:

    标签: go go-modules govendor


    【解决方案1】:

    你可以试试replace 指令。类似于

    第一个

    cd ./vendor/golang.org/x/net/html
    go mod init
    

    然后在你的根目录go.mod

    module your/super/module
    
    replace golang.org/x/net/html => ./vendor/golang.org/x/net/html
    
    require golang.org/x/net/html v0.0.0
    
    

    请注意,requirereplace 都是必需的。

    【讨论】:

    • 由于问题是供应商文件夹位于我的依赖项之一中,因此我的模块依赖于其中包含供应商的存储库。因此,按照您的提示,我必须做的是在我的硬盘中的其他位置克隆依赖项,转到vendor/golang.org/x/ne/htmlt 文件夹并执行go mod init。然后根go.mod 中的替换部分是replace golang.org/x/net/html => ../../path/elsewhere/vendor/golang.org/x/net/html 现在它可以工作了。谢谢!
    【解决方案2】:

    go1.15 之后,您可以使用-mod=readonly 构建以避免仅从供应商目录导入。

    示例:

    go build -mod=readonly -o ./build/project -ldflags "-s -w" main.go

    【讨论】:

      猜你喜欢
      • 2016-11-22
      • 2019-05-04
      • 1970-01-01
      • 1970-01-01
      • 2019-12-15
      • 2013-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多