为什么要从 gemspec 文件中排除测试?

Why exclude tests from gemspec files?

Bundler's gemspec template 提供以下作为指定 gems 文件的默认值:

spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }

许多其他(看似无关的)文件,如 .gitignore 和 .travis.yml 文件将被包括在内,那么为什么要排除测试?

我也见过 other high-profile gems 忽略测试文件。

除了保存关于 gem 的任意元数据之外,Gem 规范做的一件重要事情是告诉 Rubygems 构建您的 gem.

我认为 Bundler 建议排除测试,因为它们不是构建 gem 或 运行 所需的功能代码。在 Ruby 宇宙中包含每个 Gem 的每个测试套件将是昂贵的。没有令人信服的理由需要从您的应用程序中访问 Omniauth 的测试。

测试很重要,这就是它们作为存储库的一部分存在的原因。它们在生产中不是必需的,因此它们不会包含在您从 Rubygems.

下载的包中

至于.gitignore.travis.yml可以自行排除。我不认为 Bundler 团队试图考虑所有情况,只是考虑最有可能的情况。