“PHP Composer”与“Ruby Gems and Bundler”相比

(首先,这个问题不是“哪个更好”的问题。我只是想知道它们是如何相似的,并且在function方面有所不同。)

我是php开发人员,目前正在学习ruby 。 在这些日子里,鼓励许多php开发人员使用Composer进行依赖管理。 在提问之前,我想首先validation我的知识。

根据我的理解,

  • Composer是php库(或包)的依赖管理工具。
  • Composer按项目安装php库(所谓的本地)。 我的意思是为project1安装的php库不能重新用于project2而不再为project2安装。

我注意到Ruby也有非常好的依赖管理工具“ RubyGems ”。 据我所知,

  • RubyGems ”是“ RubyGems ”的包管理器。
  • Gem ”是一个以标准格式打包的Ruby程序或库,用于共享。 (Rails也是一个gem。)
  • Gem可以通过命令安装,就像gem install sinatra
  • 但是,也有所谓的“ Bundler ”,它也是为应用程序捆绑gem的gem。
  • 当命令bundle install运行时(在特定的ruby项目目录下),将为此ruby项目安装Gemfile中列出的所有gem。

所以,我的问题就在这里。

  1. Composer类似于RubyGems还是Bundler
  2. 运行gem install sinatra ,它是否安装在系统级别?
  3. 运行bundle install ,是否在本地(仅在此项目上)或系统级别安装Gems?
  4. 如果我需要两个版本的一个gem (例如sinatra )用于不同的项目,我应该如何处理?

(对不起,我的问题很长。如果我的理解有问题,请再次抱歉,请指出正确的。)

1)Composer与bundler更相似。 Composer为您的项目带来了一切,bundler将所有内容带到您的系统中,并在项目的上下文中“链接”它们。 Bundler正在与后面的gem合作。

2)是的。 gem install在系统范围内执行(如果使用rbenv或rvm之类的东西,则按用户执行)

3)看看1.系统范围,当你通过bundle exec运行时,根据Gemfile正确选择

4)我建议使用Gemfile,将您感兴趣的版本放在那里,然后让Bundler完成剩下的工作(它将在后面安装多个版本并选择正确的版本)。 一定要运行“bundle exec”。 如果你进入rvm,你也可以选择使用rvm gemset,但这样做更难处理,在尝试部署时你会遇到非常糟糕的时间。