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也忽略了测试文件。
答案 0 :(得分:2)
除了保存关于gem的任意元数据之外,Gemspec做的一件重要事情是告诉Rubygems构建gem所需的文件。
我认为Bundler建议排除测试,因为它们不是构建或运行gem所需的功能代码。在Ruby世界中包含每个Gem的每个测试套件都会很昂贵。没有令人信服的理由需要从您的应用程序中访问Omniauth的测试。
测试很重要,这就是为什么它们作为存储库的一部分存在的原因。它们在生产中不是必需的,因此它们不会被包含在您从Rubygems下载的包中。
对于.gitignore
和.travis.yml
,您可以自行排除这些内容。我不认为Bundler团队试图考虑每种情况,只考虑最可能的情况。