如果我创建一个满足 RubyGem 所需结构的 Ruby 项目,包括一个有效的 gem 规范文件,并将其托管在 Git 存储库中,但尚未将其构建到 myproject.gem
文件,严格来说,它是一个 gem 吗?
毕竟gem install
是安装不了的,即使使用了--source
选项。
注意。我意识到 Bundler 能够安装这样的项目。
最佳答案
根据RubyGems Guides ,一个 gem 包含:
代码
没有 Ruby 代码就没有 Ruby 项目。
文档
根据项目的自述文件和源代码注释自动生成。
gem 规范
项目元数据。
根据这个定义,可以看出 Ruby 项目和 gem 之间唯一的区别是规范。
实际上,整个打包过程从规范开始:
- 你喂
gem build
一个.gemspec
文件 - 它评估文件,这是有效的 Ruby 代码,并获得
Gem::Specification
对象 - 它将规范中列出的文件添加到存档
- 它将编译的规范添加到第二个存档
- 它创建了你的
.gem
文件,它只是这两个文件的容器
当你打开 .gem
包裹,你发现了什么?
您的项目文件和元数据。是的,基本上就是这样:一个包含一大堆项目元数据的美化 tarball。
就其本身而言,这与压缩整个项目树并将其上传以供下载,或者用当前版本标记最新提交并告诉人们从 GitHub 获取存档没有什么不同。
常规软件源包和 gem 之间的唯一区别是 RubyGems 软件 能够使用包中包含的信息来提供自动包管理,依赖项解析、从远程存储库安装等等。其他包格式也是如此,比如 Red Hat 的 rpm
。和 Debian 的 deb
.
虽然 gem
从技术上讲是软件包本身,该名词还非正式地用来指代可以打包为 gem
的整个项目– 具有 gem 规范的项目。它是否已被推送到 RubyGems.org 或任何其他远程 gem 存储库并不重要,因为您仍然可以使用您的规范生成 gem
打包或提取有关项目的信息。
Gemnasium ,例如,是一项解析您的 .gemspec
的服务为了确定和跟踪您的 gem 的依赖项,它不会生成或下载任何包。
关于ruby - Ruby 项目在什么时候变成了 gem?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11106801/