当 gem 已经是我正在使用的另一个 gem 的依赖项时,为什么我需要明确包含它?
Why do I need to explicitly include a gem when it's already a dependency of another gem I'm using?
我创建了一个依赖于另一个 gem 的 gem/Rails 引擎(我们称之为 my_rails_gem);具体来说,composite_primary_keys gem(一些模型需要它)。所以在 .gemspec 文件中,我有
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,但这是专门防止这种情况。是我做错了什么,还是我的 expectations/understanding 错了?
我认为不自动要求依赖 gem 的原因是您 gem 的用户(您)可以选择要求依赖 gem。这是有原因的,但谈话时间有点长。
如果您希望在包含 gem 时自动需要依赖 gem,那么在您的 my_rails_gem.rb
文件中(在您的 lib
目录中)您可以做:
require 'composite_primary_keys'
我相信这应该对您有用。至少,我是这样做的。
此外,如果从属 gem 具有您想要包含的样式表和 javascript 资产(我怀疑 composite_primary_keys
没有),您需要添加适当的指令到您的 my_rails_gem.js
和 my_rails_gem.sass
(或您使用的任何模板引擎)文件。
我创建了一个依赖于另一个 gem 的 gem/Rails 引擎(我们称之为 my_rails_gem);具体来说,composite_primary_keys gem(一些模型需要它)。所以在 .gemspec 文件中,我有
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,但这是专门防止这种情况。是我做错了什么,还是我的 expectations/understanding 错了?
我认为不自动要求依赖 gem 的原因是您 gem 的用户(您)可以选择要求依赖 gem。这是有原因的,但谈话时间有点长。
如果您希望在包含 gem 时自动需要依赖 gem,那么在您的 my_rails_gem.rb
文件中(在您的 lib
目录中)您可以做:
require 'composite_primary_keys'
我相信这应该对您有用。至少,我是这样做的。
此外,如果从属 gem 具有您想要包含的样式表和 javascript 资产(我怀疑 composite_primary_keys
没有),您需要添加适当的指令到您的 my_rails_gem.js
和 my_rails_gem.sass
(或您使用的任何模板引擎)文件。