【发布时间】:2021-07-08 04:20:41
【问题描述】:
对于我的项目,我正在尝试获取项目的所有依赖项和子依赖项。我需要每个依赖项的特定版本。我不仅需要我的项目的依赖,还需要依赖的依赖等等直到root。
对于我的项目,go list -m all 适用于除了没有选择使用 go.mod 文件的间接依赖项之外的所有内容。现在我的工作流程是获取第一批存储库,从 git 下载它们,然后使用“GO111MODULE=on go build ./...”。和“GO111MODULE=on go list -m -json all”获取依赖列表。我不检查 go.mod,因为我正在扫描的所有存储库都使用 go.mod 文件。
对于这个初始列表中的依赖项列表,我有一些疑问,对于没有 go.mod 文件的文件,我将其用作参考:“https://blog.golang.org/using-go-modules”
-Path = 接收自go list -m all,可以是 GitHub、gopkg 或任何用于 dl 的 go 包。
没有 go.mod
-“GO111MODULE=on go mod init <PATH from parent go.mod>”
-“GO111MODULE=on go build ./…”
-“GO111MODULE=on go mod tidy”
-“GO111MODULE=on go list -m -json all”
-From there I get a list of the dependencies of this module.
使用 go.mod
-“GO111MODULE=on go build ./…”
-“GO111MODULE=on go mod tidy”
-“GO111MODULE=on go list -m -json all”
我应该在每个具有 go.mod 文件的依赖项上运行 go build 吗?对于没有 go.mod 文件的人,我知道应该这样做,因为我们将如何使用依赖项填充 go.mod 文件。但是对于带有 go.mod 文件的文件,我是否会通过 go build 提取我的项目不一定使用的额外内容,例如测试文件和其他在我只是导入该项目时可能不会使用的文件?我知道获得更多未使用的依赖项而不是丢失一些依赖项更好,但是依赖项的数量之多让我有点不知所措。
【问题讨论】:
-
go list 无论包是否是模块都有效,只是不要使用 -m 标志。对于其余的问题:没有什么可担心的,一切正常。未使用的依赖项不是问题,包内但在构建期间未使用的东西也不是要担心的问题。
-
理解这个问题有些困难。我认为答案是“不,我认为你不应该在每个使用 go 模块的 dep 上运行
go build”。或许你能从这里更好地理解为什么:github.com/golang/go/wiki/… -
使用 go list 的问题是它没有显示使用的依赖的版本,这是我需要的,也是我使用 -m 标签的原因
-
它没有非模块依赖版本的概念。它只理解模块的版本。
标签: go