如何让 dep ensure 删除未使用的 Go 文件、依赖项或包

How to get dep ensure to remove unused Go files, dependencies or packages

当使用 dep ensure -add <package> 添加新的依赖项时,我看到 dep 添加了包的完整存储库,而不仅仅是我需要的部分。

例如,我添加了 aws-sdk-go 并且 dep ensure 将 87MB 的文件放入我的 vendors 文件夹中,即使我只使用 AWS Secrets Manager 服务。

要解决此问题,您需要定义 [prune] 设置,确定哪些文件和目录可以被视为不需要,从而自动从 vendor/ 中删除。

以下选项当前可用:

  • unused-packages 表示应该删除未出现在包导入图中的目录中的文件
  • non-go 删除 Go 不使用的文件
  • go-tests 修剪 Go 测试文件

出于谨慎考虑,dep 不会选择性地保留可能具有法律意义的文件。

默认情况下禁用修剪选项。但是,通过 dep init 生成 Gopkg.toml 将添加行以在根级别启用 go-testsunused-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文件必然落在该模型之外,因此无法对安全性做出可比的通用定义。