rubygems / 仅为测试添加运行时依赖项(或任何给定的环境)
rubygems / add runtime dependency only for test (or any given env)
目前正在研究扩展规范功能的 gem(它需要 factory_bot
),如何在 add_runtime_dependency 中仅针对相关组定义它(这里,:test
) ?
或者,如果用户未在其项目中添加相关依赖项,让 gem 引发是否是更好的做法?
如果您的 gem 具有运行时依赖性,它应该按原样列在 gem 规范中
是什么允许 Bundler 进行依赖项解析以查看您的 gem 是否与 Gemfile 中的其他 gem 兼容。
最终用户可以将您的 gem 放入 Gemfile 的组中。如果他们将它放在 :test
组中,它只会在测试环境中加载。如果他们没有阅读自述文件并将其放在主要组中,那么这不是你的问题。
Gem::Specification.new do |s|
# ...
s.add_dependency 'factory_bot', version
# ...
end
请注意,您还可以在 gem规范中列出开发依赖项。
Gem::Specification.new do |s|
# ...
s.add_development_dependency 'rubocop', '~> 0.44.1'
end
这些依赖项将在 developing/testing gem 本身时使用,但不会 "passed on" 当您通过捆绑程序安装 gem 时。
Is it a better practice to let the gem raise if the concerned
dependency is not added by the user in its project ?
No. Ruby已经有很好的依赖解析器(Bundler)了。使用它。
目前正在研究扩展规范功能的 gem(它需要 factory_bot
),如何在 add_runtime_dependency 中仅针对相关组定义它(这里,:test
) ?
或者,如果用户未在其项目中添加相关依赖项,让 gem 引发是否是更好的做法?
如果您的 gem 具有运行时依赖性,它应该按原样列在 gem 规范中 是什么允许 Bundler 进行依赖项解析以查看您的 gem 是否与 Gemfile 中的其他 gem 兼容。
最终用户可以将您的 gem 放入 Gemfile 的组中。如果他们将它放在 :test
组中,它只会在测试环境中加载。如果他们没有阅读自述文件并将其放在主要组中,那么这不是你的问题。
Gem::Specification.new do |s|
# ...
s.add_dependency 'factory_bot', version
# ...
end
请注意,您还可以在 gem规范中列出开发依赖项。
Gem::Specification.new do |s|
# ...
s.add_development_dependency 'rubocop', '~> 0.44.1'
end
这些依赖项将在 developing/testing gem 本身时使用,但不会 "passed on" 当您通过捆绑程序安装 gem 时。
Is it a better practice to let the gem raise if the concerned dependency is not added by the user in its project ?
No. Ruby已经有很好的依赖解析器(Bundler)了。使用它。