当一个 gem 已经是我正在使用的另一个 gem 的依赖项时,为什么我需要显式包含它?



我创建了一个依赖于另一个gem的gem/Rrails引擎(让我们称之为my_Rails_gem(;特别是composite_primarykeysgem(有些模型需要它(。所以在.gmspec文件中,我有

Gem::Specification.new do |s|
#...
s.add_dependency 'composite_primary_keys'

问题是,当我在另一个rails项目的Gemfile中包含my_rails_gem并尝试使用这些模型时,我会收到关于composite_primary_keys功能的错误。我还必须明确地将gem 'composite_primary_keys'添加到应用程序的Gemfile中,以使其正常工作。

为什么会这样?这不是Bundle和gem依赖关系的全部意义吗?我想减轻使用my_rails_gem的开发人员的负担,记住必须包括composite_primary_keys,但这是专门防止这种情况发生的。我是做错了什么,还是我的期望/理解错了?

我认为,不自动需要依赖gem的原因是,您的gem的用户(您(可以选择需要依赖的gem。这是有原因的,但这是一个有点长的对话。

如果您希望在包含gem时自动需要依赖的gem,那么在my_rails_gem.rb文件(在lib目录中(中,您可以执行:

require 'composite_primary_keys'

我相信这应该对你有用。至少,我就是这么做的。

此外,如果依赖gem具有要包含的样式表和javascript资产(我怀疑composite_primary_keys没有(,则需要将适当的指令添加到my_rails_gem.jsmy_rails_gem.sass(或使用的任何模板引擎(文件中。

相关内容

最新更新