Разница между композитором предпочитает-dist и предпочитают-источник?

Глядя на помощь для команды install PHP Composer, я вижу следующие два параметра

 $ composer help install Options: --prefer-source Forces installation from package sources when possible, including VCS information. --prefer-dist Forces installation from package dist even for dev versions. 

Что такое установка «dist»? Я ткнул вокруг сайта композитора и Google, но, похоже, не было ничего, что касалось этого (поэтому я предполагаю, что это то, что ядро ​​и очевидное для людей, знакомых с Composer – извинения за вопрос новичков)

Я предполагаю, что --prefer-source – это то, где Composer спросит Packagist для местоположения репозитория, а затем checkout / clone / export / etc. сам проект.

Если это так, то откуда же --prefer-dist загрузить? Что он загружает?

Согласно http://getcomposer.org/doc/03-cli.md , --prefer-source предпочитает создавать каталог пакетов, который представляет собой «репозиторий управления версиями». Это эквивалентно тому, как вы печатаете:

 $ git clone ... 

или

 $ svn checkout ... 

Параметр --prefer-dist предпочитает создавать не-«репозиторий управления версиями», что эквивалентно тому, как вы печатаете:

 $ git clone ... ; rm -fr dir/.git 

или

 $ svn export ... 

Кроме того, вы можете определить отдельные репозитории для source и dist в вашем composer.json . Вот пример:

 { "repositories": [ { "type": "package", "package": { "name": "joshuaclayton/blueprint-css", "version": "master", "source": { "url": "git://github.com/joshuaclayton/blueprint-css.git", "type": "git", "reference": "master", } } }, { "type": "package", "package": { "name": "fiftyone/mobi-lite-php", "version": "2013.03.06", "dist": { "url": "http://iweb.dl.sourceforge.net/project/fiftyone/51Degrees.mobi-Lite-2013.03.06.php.zip", "type": "zip" }, } } ] } 

ПРИМЕЧАНИЕ. По какой-либо причине, когда я использую --prefer-dist , я иногда получаю ошибки, такие как

 Fatal error: Cannot redeclare class Zend_Db_Adapter_Pdo_Abstract in ... 

которые не появляются, когда я использую --prefer-source . По этой причине я использую только --prefer-source , пока не --prefer-source причину этой проблемы.

Как четко указано в документации композитора :

Фактически, внутри Composer видит каждую версию как отдельный пакет . Хотя это различие не имеет значения, когда вы используете Composer, это очень важно, когда вы хотите его изменить.

а также,

Dist : dist – это упакованная версия данных пакета . Обычно выпущенная версия, как правило, стабильная версия .

Источник : источник используется для разработки. Обычно это происходит из репозитория исходного кода, такого как git . Вы можете получить это, когда хотите изменить загруженный пакет.

так,

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

Если вы проверяете ветку, предполагается, что вы хотите работать в ветке, и Composer фактически клонирует репо в нужное место в вашем каталоге поставщика.

Для тегов он просто копирует правильные файлы, фактически не клонируя репо.

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


Основы:

Обычно композитор имеет дело с тегами (например, 1.2.7 ), но это не так все время. Вы также можете использовать ветвь (например, dev-master ) в качестве зависимости.

  • Если вы хотите, чтобы композитор потребовал тег , он просто копирует файлы на вашем локальном (где-то в вашем каталоге vendor ).

  • Если вы хотите, чтобы композитор просматривал ветку вместо тега, есть шанс (рациональное предположение композитора), вы хотите его развить (тем самым внесение изменений), поэтому композитор клонирует репозиторий на вашем локальном (опять же, где-то в каталоге vendor ) ,


И что?!

Вопрос:

Что делать, если вы хотите использовать тег , но все же сможете развить его на своем локальном компьютере?

Ответ:

используйте --prefer-source вместе с composer install composer update , composer update или composer require команды:

 composer install symfony/symfony:3.4.* --prefer-srouce 

Вопрос:

Что, если вы хотите потребовать самую новую ветвь разработки, но вы просто хотите получить новый материал и не хотите заниматься его разработкой?

Ответ:

используйте --prefer-dist вместе с composer install composer update , composer update или composer require команды:

 composer install symfony/symfony:dev-master --prefer-dist