Mark24
Ruby中Gemspec和Gemfile的区别
前言
摘要一些重要的段落来描述这之间的区别
Gemspec和Gemfile的区别
其实最开始只有 Gemspec,这是描述一个 gem 规则的描述文件,包含作者、依赖等等。当我们发布一个gem的时候,最要关注的就是 Gemspec。在这里加入全部的依赖。
Gemfile 是来自 bundler 管理软件的描述文件。你可以理解为,他是用来站在项目的角度,管理多个gem的,比如我们常见的web项目,我们要安装十几个gem的依赖,Gemfile的角色就是帮助做除了 gem 之外的事情。
当我们开发一个gem的时候,我们可能在自己开发的过程中,使用了bundler,甚至Gemfile。但是我们要明白的是,在打包和分发的过程中是以 Gemspec 中的描述为准的。
一个重点的问题就是 我们自己gem要伴随的依赖,所以这个依赖是要写在 Gemspec 中
gemspec specification-reference
一篇文章
Gemfile 与 Gemspec
我们不是历史的创造者,我们是由历史创造的。 - 马丁路德金。
正如引用所说,让我们首先了解这两个文件是如何存在的。一旦你了解了过去,你就可以更好地了解现在。
所以这一切都始于 2006 年,当时 RubyGems 创建了 Gemspec 来定义 Ruby 包规范。 Gemspec 基本上是 gems 的自述文件。它告诉你关于 Gem 的作者、版本、摘要、描述、内部依赖、执行和一切。所以现在很容易使用宝石,因为它们都有自己的规格。混乱始于内部依赖。在 Gemspec 文件中,您定义了您的 gem 所依赖的 gem。那么如何确定运行 gem 所需的 gem 的兼容版本呢?如何跨开发人员和部署管理相同的开发环境?还有其他不是gem的项目,如何管理它们的依赖关系?因此,需要一些自动化流程来完成这项工作。一个可以根据我们的配置找出兼容版本并可以锁定它们以供部署和生产使用的过程。
为了解决这个问题,Bundler 在 2009 年发明了 Gemfile。在 Gemfile 中,您只需编写依赖项名称,它就会为您的配置提供最兼容的最新版本。每当您想更改依赖项时,只需更改 Gemfile 并执行 bundle install
,Bundler 将处理其余的事情。
所以 Gemspec 基本上是您的 gem 的信息手册。必须有 Gemspec 才能创建 gem,而 Gemfile 是可选的。尽管您可以使用 Gemfile 和 Gemspec 来跟踪除了您的 gem 之外的其他依赖项。如果您没有创建不需要 Gemspec 的 gem,您可以简单地使用 Gemfile 来管理您的所有项目依赖项。
在使用 ruby 时,最好了解 Gemspec 和 Gemfile 的用法。否则,由于将它们放在错误的文件中,您最终可能会陷入依赖关系解决的困境。