RubyGems 导航菜单
指南

解开 RubyGem 内部结构的神秘面纱。

Gem 的结构

每个 gem 都有一个名称、版本和平台。例如,rake gem 的版本为 13.0.6(来自 2021 年 7 月)。Rake 的平台是 ruby,这意味着它可以在任何 Ruby 运行的平台上运行。

平台基于 CPU 架构、操作系统类型以及有时操作系统版本。例如,“x86-mingw32” 或 “java”。平台表示 gem 仅适用于为相同平台构建的 ruby。RubyGems 将自动下载适合你平台的正确版本。有关详细信息,请参阅 gem help platform

Gems 内部包含以下组件

  • 代码(包括测试和支持工具)
  • 文档
  • gemspec

每个 gem 遵循相同的代码组织标准结构

% tree freewill
freewill/
├── bin/
│   └── freewill
├── lib/
│   └── freewill.rb
├── test/
│   └── test_freewill.rb
├── README
├── Rakefile
└── freewill.gemspec

这里,您可以看到 gem 的主要组成部分

  • lib 目录包含 gem 的代码
  • testspec 目录包含测试,具体取决于开发人员使用的测试框架
  • gem 通常有一个 Rakefilerake 程序使用它来自动化测试、生成代码以及执行其他任务。
  • 此 gem 还包含 bin 目录中的可执行文件,该文件将在安装 gem 时加载到用户的 PATH 中。
  • 文档通常包含在 README 中,并与代码内联。当您安装 gem 时,会自动为您生成文档。大多数 gem 包含 RDoc 文档,但有些使用 YARD 文档。
  • 最后一块是 gemspec,它包含有关 gem 的信息。gem 的文件、测试信息、平台、版本号等都与作者的电子邮件和姓名一起在此处列出。

有关 gemspec 文件的更多信息

构建您自己的 gem

Gemspec

gemspec 指定有关 gem 的信息,例如其名称、版本、描述、作者和主页。

以下是一个 gemspec 文件的示例。您可以在 如何制作 gem 中了解更多信息。

% cat freewill.gemspec
Gem::Specification.new do |s|
  s.name        = 'freewill'
  s.version     = '1.0.0'
  s.summary     = "Freewill!"
  s.description = "I will choose Freewill!"
  s.authors     = ["Nick Quaranto"]
  s.email       = '[email protected]'
  s.homepage    = 'http://example.com/freewill'
  s.files       = ["lib/freewill.rb", ...]
end

有关 gemspec 的更多信息,请查看完整的 规范参考,它详细介绍了每个元数据字段。

致谢

本指南改编自 Gonçalo Silva 在 docs.rubygems.org 上的原始教程以及 Gem Sawyer,现代 Ruby 战士。