【问题标题】:When using `bundle gem floob`, why is a directory of the same name as the gem is created?使用`bundle gem flob`时,为什么会创建一个与gem同名的目录?
【发布时间】:2018-05-11 20:34:34
【问题描述】:

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

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

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

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

唯一运行的命令是bundle gem。

我想澄清一下所有floobs之间的关系~

【问题讨论】:

  • bundle install 在何时何地创建此文件夹结构?请更具体。你运行了哪些命令,在哪里运行?
  • 我把命令弄错了,它是bundle gem。我已经相应地更新了帖子。

标签: ruby rubygems bundler setup-project directory-structure


【解决方案1】:

这种“两层”结构的原因是因为/floob/lib 最终将是添加到Ruby require 加载路径的文件夹。

这样,如果你把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 以加载这些文件,就像我上面描述的那样。

这样可以保持加载路径干净,并且组件之间可以很好地分开。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    相关资源
    最近更新 更多