导入解析
Glide 扫描应用程序代码库以发现在vendor/
目录中管理的项目。这以几种不同的方式发生。知道如何运作可以帮助您了解Glide正在做什么
初始化时
当你为代码库运行glide create
或者glide init
来创建一个glide.yaml
时,Glide 将会扫描代码库来识别导入。它通过文件来识别包。在每个包中,它读取Go文件中的导入。
从这里,它将尝试找出外部包。外部包按根版本控制系统仓库与其下列列出的子包来分组。遵循与 go 工具一样的规则来找出根版本控制仓库与其下的包相比。
- GitHub, Bitbucket, Launchpad, IBM Jazz 和 go.googlesource.com 会用特殊规则解析。 我们可以知道或可以调用API来了解这些包。
- 如果与仓库相关联的包以.git,.hg,.bzr或.svn结尾,则可以用于确定版本控制系统的根和类型。
- 如果规则无法解析,则会尝试通过
go get
来查找信息。
再次,和使用go get
确定外部包位置时的方式是一样的。
如果项目具有存储在Godep,GPM,Gom或GB文件中的依赖包配置,则该信息将用于填充glide.yaml
文件中的版本
更新时
当运行glide update
,glide up
,glide get
或者 glide install
(没有glide.lock
时),Glide 会尝试检测完整的依赖树。那是所有的依赖关系,包含了依赖的依赖。
默认选项
默认方式是遍历导入引用树。解析器首先扫描本地应用程序以获取导入列表。然后,它查看特定的包导入,扫描导入的包进行导入,并不断查找,直到获取完整的树。
这意味者仅源码中引用的导入才会获取。
当获取版本控制仓库时,它将获取完整的仓库。但是,它不扫描仓库中的所有包来获取依赖关系。相反,只有被扫描时在树中引用的包才会继续导入。
按照 Glide, Godep, GPM, Gom 和 GB 配置方式来确定版本和要获取的仓库。先进入引导树的版本优先。
所有可能的依赖
在glide update
使用--all-dependencies
将会改变扫描的行为。它会去文件系统中获取所有可能的引用的包,而不是遍历导入树。这将下载树中的所有包。即使那些在程序代码中或代码导入的包并未引用到的。
与其他情况一样,Glide,Godep,GPM,Gom 和 GB 文件用于设置所获取仓库的版本。