使用 `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
以加载这些文件,就像我上面描述的那样。
通过这种方式,您可以保持加载路径干净,并且组件之间很好地分开。
我正在制作我的第一个 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
以加载这些文件,就像我上面描述的那样。
通过这种方式,您可以保持加载路径干净,并且组件之间很好地分开。