微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

什么是构建的 gemspec 文件带版本?

如何解决什么是构建的 gemspec 文件带版本?

当我运行命令时

$: gem build example_gem.gemspec

我得到一个名为 example_gem-0.0.0.gem 的文件。这个文件里有什么,有什么用?

这个文件是否与 gem 被包含到需要它们的 Ruby 代码中有关吗?一旦 gem 已经安装在机器上

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

这是否意味着它仅用于上传/下载/安装?

解决方法

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。