【问题标题】:How to determine which module/s use an indirect dependency?如何确定哪个模块/s使用间接依赖?
【发布时间】:2021-08-26 03:46:48
【问题描述】:

在 Go 1.17 中,go.mod 有两个部分,直接依赖项和间接依赖项,但是,没有说明间接依赖项与直接依赖项之间的关系。

我怎样才能找到一个或多个模块使用它的特定间接依赖?

【问题讨论】:

  • 请注意,这在 Go 1.17 中并不新鲜。间接依赖总是存在于 go.mod 中,它们只是被移到了 Go 1.17 中的一个新部分。
  • 相关/可能重复:stackoverflow.com/q/57159707/13860

标签: go dependencies go-modules


【解决方案1】:

go mod why -m $MODULE 将为您提供一个(任意选择的)从模块中的包到$MODULE 中的包的导入链。但是,它本身并不报告所有此类路径。

go list -json all 确实公开了足够的信息来识别这些路径,但它没有提供一种简单的方法来展示供人类消费的进口链。但是,一些第三方工具(如godagomod)可以转换或查询go list 的输出结构更丰富。 (有关查询语法和示例,请参阅他们的文档。)

【讨论】:

  • go mod graph 是可接受的替代方案吗?
  • 不是,不是。只有在从 // indirect 部分导入了某个包时,才会将模块依赖项添加到该部分,但 go mod graph 根本不检查包导入图——它只报告模块之间的依赖关系,而不是这些模块中的包。
  • 换句话说:go mod graph 会给你一个保守的近似值。 (它会报告一些模块到模块的边缘,这些边缘是由与您的程序实际上不相关的包产生的。)
  • 相关,但可能对 OP 提出问题的意图没有那么有用。他们要求“特定的间接依赖关系是哪个或哪些模块使用它”,但对于go.mod 文件中的indirect 模块,真正重要的唯一用途是由主模块传递导入的包。这实际上取决于他们试图回答哪个问题:go mod graph 回答“为什么是这个特定版本?”,而包导入图回答“为什么是这个模块?”。
猜你喜欢
  • 2022-11-12
  • 2010-10-03
  • 2021-04-14
  • 1970-01-01
  • 2019-02-20
  • 2018-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多