使用 `bundle gem floob` 时,为什么会创建一个与 gem 同名的目录?

When using `bundle gem floob`, why is a directory of the same name as the gem is created?

我正在制作我的第一个 gem。我们假设它被称为 floob。例如:bundle gem floob

为什么 bundle gem 会为 gem 创建两个 同名 的目录?例如:/floob/lib/floob/

我是否将大部分代码放在 /lib/floob/ 中(与 version.rb 文件一起?)

使用 gem 名称创建的文件的用途是什么? 例如:/floob/lib/floob.rb

唯一的命令 运行 是 bundle gem

我想澄清一下所有 floobs~

之间的关系

这个"two-tier"结构的原因是因为/floob/lib最终将是添加到Rubyrequire加载路径的文件夹。

这样,如果你把 floob.rb 放入 /floob/lib,你可以加载它:

require 'floob' 

这也提供了在 floob 命名空间下分离子组件的机会,例如 version.rb,方法是将它们放入 /floob/lib/floob。这意味着您现在可以执行以下操作:

require 'floob/version'
require 'floob/base'
require 'floob/core'
etc..

如果 /floob 直接添加到加载路径,那么很难将代码与 README 文件、gemspecs 或其他资产(如图像、二进制 blob、YAML 设置)分开文件或 bin 存根。

现在实际代码将位于 lib 下,其他所有内容都可以很好地直接放入 /floob 下的文件夹中,而不会干扰代码或加载路径功能。

另请注意,在大多数情况下,除了 floob.rb 之外,您不应将任何其他内容放入 /floob/lib,否则您将污染全局加载路径命名空间。相反,所有其余代码都应放入 /floob/lib/floob,然后将 require 代码放入 floob.rb 以加载这些文件,就像我上面描述的那样。

通过这种方式,您可以保持加载路径干净,并且组件之间很好地分开。