Подтвердить что ты не робот

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

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

$ 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 скачать? Что он загружает?

4b9b3361

Ответ 1

В соответствии с 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, пока не выясню причину этой проблемы.

Ответ 2

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

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

и

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

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

так,

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

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

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

Ответ 3

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


Основы:

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

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

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


Итак, что?!

Вопрос:

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

Ответ:

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

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

Вопрос:

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

Ответ:

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

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