导入解析

Glide 扫描应用程序代码库以发现在vendor/目录中管理的项目。这以几种不同的方式发生。知道如何运作可以帮助您了解Glide正在做什么

初始化时

当你为代码库运行glide create或者glide init来创建一个glide.yaml时,Glide 将会扫描代码库来识别导入。它通过文件来识别包。在每个包中,它读取Go文件中的导入。

从这里,它将尝试找出外部包。外部包按根版本控制系统仓库与其下列列出的子包来分组。遵循与 go 工具一样的规则来找出根版本控制仓库与其下的包相比。

  1. GitHub, Bitbucket, Launchpad, IBM Jazz 和 go.googlesource.com 会用特殊规则解析。 我们可以知道或可以调用API来了解这些包。
  2. 如果与仓库相关联的包以.git,.hg,.bzr或.svn结尾,则可以用于确定版本控制系统的根和类型。
  3. 如果规则无法解析,则会尝试通过go get来查找信息。

再次,和使用go get确定外部包位置时的方式是一样的。

如果项目具有存储在Godep,GPM,Gom或GB文件中的依赖包配置,则该信息将用于填充glide.yaml文件中的版本

更新时

当运行glide updateglide upglide get 或者 glide install (没有glide.lock时),Glide 会尝试检测完整的依赖树。那是所有的依赖关系,包含了依赖的依赖。

默认选项

默认方式是遍历导入引用树。解析器首先扫描本地应用程序以获取导入列表。然后,它查看特定的包导入,扫描导入的包进行导入,并不断查找,直到获取完整的树。

这意味者仅源码中引用的导入才会获取。

当获取版本控制仓库时,它将获取完整的仓库。但是,它不扫描仓库中的所有包来获取依赖关系。相反,只有被扫描时在树中引用的包才会继续导入。

按照 Glide, Godep, GPM, Gom 和 GB 配置方式来确定版本和要获取的仓库。先进入引导树的版本优先。

所有可能的依赖

glide update使用--all-dependencies将会改变扫描的行为。它会去文件系统中获取所有可能的引用的包,而不是遍历导入树。这将下载树中的所有包。即使那些在程序代码中或代码导入的包并未引用到的。

与其他情况一样,Glide,Godep,GPM,Gom 和 GB 文件用于设置所获取仓库的版本。