如何解决什么是构建的 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
也知道如何加载动态库(例如 .dll
s、.so
s、.dylib
s ,取决于操作系统),JRuby 的 Kernel#require
也知道如何加载 .jar
,等等。]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。