【问题标题】:How to get dep ensure to remove unused Go files, dependencies or packages如何获得 dep 确保删除未使用的 Go 文件、依赖项或包
【发布时间】:2018-12-04 06:08:02
【问题描述】:
使用 dep ensure -add <package> 添加新依赖项时,我看到 dep 添加了包的完整存储库,而不仅仅是我需要的部分。
例如,我添加了 aws-sdk-go 和 dep ensure 将 87MB 的文件放入我的供应商文件夹中,即使我只使用 AWS Secrets Manager 服务。
【问题讨论】:
标签:
go
package
dependency-management
aws-sdk-go
godeps
【解决方案1】:
要解决此问题,您需要定义 [prune] 设置,以确定哪些文件和目录可以被视为不必要,从而自动从 vendor/ 中删除。
以下选项目前可用:
-
unused-packages 表示应删除未出现在包导入图中的目录中的文件
-
non-go 修剪 Go 不使用的文件
-
go-tests prunes Go 测试文件
出于谨慎考虑,dep 非可选地保留可能具有法律意义的文件。
默认情况下禁用修剪选项。但是,通过dep init 生成Gopkg.toml 将添加行以在根级别启用go-tests 和unused-packages 修剪选项。
[prune]
go-tests = true
unused-packages = true
可以为每个项目定义相同的修剪选项。额外的名称字段是必需的,并且与 [[constraint]] 和 [[override]] 一样,应该是 source root,而不仅仅是任何导入路径。
[prune]
non-go = true
[[prune.project]]
name = "github.com/project/name"
go-tests = true
non-go = false
几乎所有项目都可以正常工作,无需设置任何项目特定规则,并在全局范围内启用以下修剪规则:
[prune]
unused-packages = true
go-tests = true
设置non-go = true 通常也是安全的。但是,由于dep 对 Go 文件所扮演的角色只有一个明确的模型,而非 Go 文件必然会超出该模型,因此没有可比的安全通用定义。