& quot; PHP Composer & quot; по сравнению с «Ruby Gems and Bundler»

(Во-первых, этот вопрос не является вопросом «что лучше». Я просто хочу узнать, насколько они похожи и различаются по функциональным возможностям.)

я PHP разработчик и в настоящее время изучает Рубин.
В эти дни, многие разработчики PHP рекомендуется использовать Composer для управления зависимостями. Прежде чем задавать вопросы, я хотел бы проверить свои знания в первую очередь.

Согласно моему пониманию,

  • Composer является инструментом управления зависимостями для библиотек php (или пакетов)
  • Composer установленная библиотека php для каждого проекта (так называемая локально). Я имею в виду, что библиотека php, установленная для project1, не может быть повторно использована для project2 без повторной установки для project2.

Я заметил что Рубин также имеет очень хороший инструмент управления зависимостямиRubyGems».
По моим сведениям,

  • «RubyGems«является менеджером пакетов для» Gems «.
  • «Gem«представляет собой Ruby-программу или библиотеку, упакованную в стандартном формате для совместного использования. (Rails также является жемчужиной).
  • Gem может быть установлен такой командой gem install sinatra,
  • Но есть и так называемыеBundler«который также является драгоценным камнем для объединения драгоценных камней для приложения.
  • Когда команда bundle install работает (в определенном каталоге проекта ruby), все гемы, перечисленные в Gemfile, установлены для этого проекта ruby.

Итак, мои вопросы здесь.

  1. Composer похоже ли RubyGems или же Bundler ?
  2. Когда беги gem install sinatraэто установлено на общесистемном уровне?
  3. Когда беги bundle installКамни устанавливаются локально (только в этом проекте) или на уровне всей системы?
  4. Если мне нужны две версии одного gem (например, Синатра) для разных проектов, как мне справиться?

(Извините за мой длинный вопрос. Если мое понимание что-то не так, извините еще раз и, пожалуйста, укажите правильное.)

10

Решение

1) Композитор больше похож на компоновщик.
Composer вносит все в ваш проект, а bundler переносит все в вашу систему и «связывает» их в контексте вашего проекта. Бандлер работает с драгоценными камнями в спину.

2) да. gem install делает вещи для всей системы (или для каждого пользователя, если вы используете что-то вроде rbenv или rvm)

3) см. 1. в масштабе всей системы и правильно выбирается в соответствии с Gemfile, когда вы запускаете вещи через bundle exec

4) Я рекомендую использовать Gemfile, поместить туда интересующую вас версию и позволить бандлеру сделать все остальное (он в конце установит несколько версий и выберет нужную). Обязательно запустите «bundle exec».
У вас также есть возможность использовать набор гемов rvm, если вы работаете с rvm, но с этим сложнее справиться, и у вас будет очень плохое время при попытке развертывания.

9

Другие решения

Других решений пока нет …