构建的 gemspec 文件(带版本)有什么用?

What is the built gemspec file (with version) for?

当我运行命令

$: gem build example_gem.gemspec

我得到一个名为 example_gem-0.0.0.gem 的文件。此文件中包含什么以及它的用途是什么?

此文件是否与 gem 如何包含在需要它们的 Ruby 代码中有关一旦安装了 gem 在机器上?

我注意到,当我进入我的 INSTALLATION_DIRECTORY 时,我可以在文件夹中看到 gems,其名称与此版本化 gem 文件的格式相匹配,但在目录,我只看到其他库代码,gemspec 文件等

这是否意味着它仅适用于 uploading/downloading/installing?

.gem 文件是 Gem。它包含 Gemspec(更准确地说,Gemspec 的对象图的 Marshal 序列化版本,而不是可执行文件 .gemspec which 生成 该对象图)以及作为该 gem 一部分的所有文件的压缩存档(在 Gem 规范中列出)。它还包含一个加密安全校验和和一个可选的加密签名。

当您安装 .gem 时,RubyGems 检查加密校验和以确保 Gem 未被篡改,检查可选签名以确保确保 Gem 是由您认为的人创建的,请阅读 Gem 规范以了解如何处理 Gem,并将其解压缩到 $GEM_HOME 目录中。

Kernel#require 简单地遍历搜索路径,直到找到与您提供的名称匹配的文件,然后 运行该文件 。它对 Gems 一无所知。 (不过,它 知道如何 找到 解压缩的 Gem 目录。)

[注意:这有点简化。 Kernel#require 可能具有特定于实现的功能,例如,YARV 的 Kernel#require 也知道如何加载动态库(例如 .dlls、.sos、.dylibs , 取决于 OS), JRuby 的 Kernel#require 也知道如何加载 .jars, 等等.]