"PHP Composer" по сравнению с "Ruby Gems and Bundler"

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

Я разработчик php и в настоящее время изучаю ruby ​​. В наши дни многим разработчикам php рекомендуется использовать Composer для управления зависимостями. Прежде чем задавать вопросы, я хотел бы сначала подтвердить мои знания.

По моему мнению,

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

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

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

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

  • Composer аналогичен RubyGems или Bundler?
  • При запуске gem install sinatra он установлен на уровне всей системы?
  • При запуске bundle install Gems устанавливаются локально (только для этого проекта) или общесистемного уровня?
  • Если мне нужны две версии одного Gem (например, синатра) для разных проектов, как мне обращаться?

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

Ответ 1

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

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

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

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