требование конкретной фиксации пакета — composer, похоже, игнорирует требования composer.json

#php #composer-php #octobercms #php-7.1

#php #композитор-php #octobercms #php-7.1

Вопрос:

У меня есть следующий composer.json / require:

     "require": {
        "php": ">=7.0",
        "ext-mbstring": "*",
        "ext-openssl": "*",
        "october/rain": "1.0.443",
        "october/system": "1.0.443",
        "october/backend": "1.0.443",
        "october/cms": "1.0.443",
        "laravel/framework": "5.5.*",
        "wikimedia/composer-merge-plugin": "dev-master#06deb2de8fe46826bbd3880003d2aed1716658b3"
    },
 

Полный composer.json можно найти по адресу https://pastebin.com/SXTeWHgC

Я бегу:

  • Композитор 1.10.19 (поскольку wikimedia / composer-merge-plugin не работает в Composer 2.0)
  • PHP 7.1.33 (это то, что есть на сервере prod)

В любом случае, когда я это делаю composer update , я получаю следующее

 Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for wikimedia/composer-merge-plugin dev-master#06deb2de8fe46826bbd3880003d2aed1716658b3 -> satisfiable by wikimedia/composer-merge-plugin[dev-master].
    - wikimedia/composer-merge-plugin dev-master requires php >=7.2.0 -> your PHP version (7.1.33) does not satisfy that requirement.
 

Для меня это не имеет никакого смысла. wikimedia/composer-merge-plugin dev-master#06deb2de8fe46826bbd3880003d2aed1716658b3 не требует >= 7.2.0 — требуется >= 5.3.2. Итак, почему я получаю эту ошибку и что я могу с этим поделать?

Комментарии:

1. Вероятно, из-за этого: getcomposer.org/doc/articles /…

Ответ №1:

Из документации композитора:

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

Источник: https://getcomposer.org/doc/04-schema.md#package-links

Это полностью соответствует поведению, которое вы видите, composer.json этой библиотеки имеет красный цвет от dev-master ГЛАВНОЙ фиксации ветки, а не от явной ссылки на фиксацию.

Комментарии:

1. Я согласен, что это плохая идея, но это OctoberCMS, который это делает. Например, посмотрите на их последнюю версию с тегами: github.com/octobercms/october/blob/v1.1.1/composer.json#L46 есть в нем "wikimedia/composer-merge-plugin": "dev-feature/composer-v2 as 1.5.0" . Они не должны создавать помеченные релизы, в которых есть dev dev, подобные этому, imho.

2. Не совсем следуя вашей логике. Они указывают на ЗАГОЛОВОК этой ветки, независимо от того, является ли она dev или другой веткой, как это связано с вопросом, пытающимся ссылаться на конкретную фиксацию?

3. И FWIIW, composer.json OctoberCMS, на который вы указываете, также указывает "php": ">=7.2"

4. Я сказал: » Например, посмотрите на их последнюю помеченную версию «. Пометка HEAD любой ветки — ужасная идея, имхо, потому что HEAD не фиксируется вовремя. HEAD может измениться. Что, если они удалят ветку? Что, если они внесут критические изменения bc в эту ветку или любую другую, которую они отметили? Это версия, которую я использую? Нет. idk, из какой версии OctoberCMS мой composer.json. Дело в том, что даже в их последней версии с тегами они делают то, что имхо, у них нет никакого бизнеса.

5. dev-feature/composer-v2 as 1.5.0 не указывает на конкретную фиксацию git, требование к версии из вашего вопроса

Ответ №2:

Вы можете либо использовать другую ветку, которую вам нужно будет предоставить в качестве собственной вилки ( HEAD вернувшись именно к той фиксации, которую вы хотите использовать). Или вы можете понять, что едете на мертвой лошади, и сойти…что означает обновление PHP, composer и просто использование composer20 ветки. Ваше утверждение, которое wikimedia/composer-merge-plugin не будет работать с composer 2.x, является ложным.