如何避免 go.mod 文件中的间接依赖

Raj*_*Raj 10 go

我正在运行go buildgo.mod使用库更新我的文件我正在使用“github.com/gocolly/colly v1.2.0”但我看到所有其他依赖项最后都说“//间接”。如何避免得到这个?这是我的 go.mod 文件

   module prodenv

go 1.13

require (
   github.com/PuerkitoBio/goquery v1.5.1 // indirect
   github.com/antchfx/htmlquery v1.2.2 // indirect
   github.com/antchfx/xmlquery v1.2.3 // indirect
   github.com/antchfx/xpath v1.1.5 // indirect
   github.com/gobwas/glob v0.2.3 // indirect
   github.com/gocolly/colly v1.2.0
   github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect
   github.com/kennygrant/sanitize v1.2.4 // indirect
   github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca // indirect
   github.com/temoto/robotstxt v1.1.1 // indirect
   golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e // indirect
   google.golang.org/appengine v1.6.5 // indirect
)
Run Code Online (Sandbox Code Playgroud)

Gri*_*kin 29

不幸的是,您无法避免它们。间接依赖,基本上是没有在go.mod你的直接依赖中列出的依赖,但它仍然需要它。

在您的情况下,它发生了,因为您使用github.com/gocolly/colly v1.2.0as 依赖项,并且v1.2.0这个包不是模块,因为它不包含go.mod,所以它的所有依赖项都是间接的,并列在您的go.modwithindirect标签中。

请注意,这colly已经go.mod在> = V2.0.0,所以如果你需要的版本,这些依赖关系将不会被列在您的间接go.mod

  • 这是一个非常好的答案。我用谷歌搜索这个,我能找到的只是“这些是间接依赖项,这是故意的”,这对我没有帮助,因为我经常在我添加到新项目的唯一依赖项之后看到“//间接”,这没有意义大部头书。现在我知道当你的依赖项不是 Go 模块时。 (4认同)
  • 为什么说这是“不幸”呢? (3认同)
  • @Flimzy IMO,首先,他们在模块的依赖项列表中引入了混乱。其次,它们实际上可能会破坏一些东西,例如“go mod graph”将间接依赖关系显示为主模块的依赖关系 - https://github.com/golang/go/issues/27309。尽管如此,我并不意味着“间接”依赖的概念是不好的。也许我应该将其修复为“不幸的是,有些包引入了间接依赖项,并且有时您无法避免它们”) (2认同)

AMA*_*N N 10

go mod tidy帮助我从 go mod 中删除了间接。

go mod tidy确保走下去。mod 文件与模块中的源代码匹配。它添加了构建当前模块的包和依赖项所需的任何缺失的模块要求,如果有一些未使用的依赖项, go mod tidy 将从 go 中删除它们。

注意:应用程序/包所需的间接依赖项不会被删除或移动到直接依赖项。这些依赖项仍将作为间接依赖项存在。