宝石(Gem)能够存在循环依赖吗?

4

我开发了一个小的宝石生态系统,某些功能将导致它们彼此依赖。

RubyGems支持循环依赖吗?换句话说,使用这些规格推送宝石是否安全?

Gem::Specification.new 'essentials' do |gem|
  gem.add_development_dependency 'development_tools'
end

Gem::Specification.new 'development_tools' do |gem|
  gem.add_runtime_dependency 'essentials'
end
2个回答

3

从技术角度来看,这并不是循环依赖关系,因为每个依赖关系都是不同类型的。如果是真正的循环依赖关系,我会建议将两者合并成一个 gem,但是你的 gem 名称说明了意图,这是明智的。

它应该工作得很好。


1

不要有循环的运行时依赖。

如果一个 gem 在 开发 时依赖于另一个 gem,而后者在 运行时 依赖于前者,这样做可能是可以的,但会有些奇怪。

尽管如此,我不建议这样做。我建议确保您的依赖关系图完全没有循环。


请问,您能提供更多细节吗?可能会出现哪些问题?这些问题是否特定于RubyGems? - Matheus Moreira
1
循环依赖通常应该避免。如果图中存在循环,我们将无法执行许多重要的依赖图操作。其中一个重要的操作是:对依赖图进行排序,但是带有循环的有向图无法排序。 - yfeldblum
3
这是什么样的回答?问题是RubyGems是否支持循环依赖,而不是@yfeldblum是否建议使用它们。请进行翻译,不要改变原意,保持简洁,不要提供其他信息。 - ggPeti
@ggPeti 这是一个完全合适的答案。明确提出的问题得到了明确的回答,隐含的问题也得到了回答。通过给出有建设性的建议来回答隐含问题是一种好的做法,我认为这不是我们想要阻止的。无论如何,我所谓的“隐含”问题实际上在 OP 提出他的问题时也被明确地问到了,“使用这些规格推送宝石是否安全”,其中“安全”可以暗示许多不同类型的安全:免受错误的安全,免受糟糕设计的安全,免受未来变化的安全。 - Segfault

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接