指南
解开 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 的代码test
或spec
目录包含测试,具体取决于开发人员使用的测试框架- gem 通常有一个
Rakefile
,rake 程序使用它来自动化测试、生成代码以及执行其他任务。 - 此 gem 还包含
bin
目录中的可执行文件,该文件将在安装 gem 时加载到用户的PATH
中。 - 文档通常包含在
README
中,并与代码内联。当您安装 gem 时,会自动为您生成文档。大多数 gem 包含 RDoc 文档,但有些使用 YARD 文档。 - 最后一块是 gemspec,它包含有关 gem 的信息。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 战士。