Предупреждение композитора: ограничение версии не имеет верхней границы

У меня под composer.json есть этот список пакетов:

    "symfony/asset": "*",
    "symfony/console": "*",
    "symfony/expression-language": "*",
    "symfony/flex": "^1.1", // ther's no warning here
    "symfony/form": "*",
    "symfony/framework-bundle": "*",
    "symfony/orm-pack": "*",
    "symfony/process": "*",
    "symfony/security-bundle": "*",
    "symfony/serializer-pack": "*",
    "symfony/translation": "*",
    "symfony/twig-bundle": "*",
    "symfony/validator": "*",
    "symfony/web-link": "*",
    "symfony/yaml": "*",

К сожалению, после попытки проверки зависимостей композитора через composer validate я получаю следующее предупреждение:

Unbound version constraints (*) should be avoided.

The version constraint has no upper bound - this is not a good idea.

Я нашел причину почему в официальном документе https://getcomposer.org/doc/faqs/why-are-unbound-version-constraints-a-bad-idea.md Но я не знаю, как исправить предупреждение.


Любая идея, как автоматически (иначе вручную) обновить "*" до текущей установленной версии, используя лишь несколько полезных командных строк composer.
(Чтобы определить верхнюю границу моих ограничений).

Во-первых, это ужасная идея - требовать *.

emix 10.12.2018 12:59

@emix, спасибо, interraction, я думаю, это поведение композитора после установки зависимостей. Любая идея, как это исправить

famas23 10.12.2018 13:11

Забыл, что это ограничено внутренне. Вы можете проигнорировать это предупреждение, так как это не ошибка.

emix 10.12.2018 14:58

Это может быть решено для новых проектов с помощью Flex 1.1: github.com/symfony/flex/issues/421

YetiCGN 10.12.2018 17:26
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
4
677
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

composer update

Но я бы рекомендовал иметь пакеты для конкретной версии вместо "*", чтобы избежать конфликта с будущими пакетами.

композитор упадате не решит проблему. Спасибо за вашу попытку :)

famas23 10.12.2018 13:50
Ответ принят как подходящий

Any idea how to update automatically (else manually) the "*" to the current installed version, via just some useful composer command lines.

Нет такой команды композитора, как composer set-version symfony/* 4.2

Делать это нужно вручную.

Как у вас сработало "найти и заменить" "*""^4.2" в файлах *.json?


Я предполагаю, что вы хотели бы использовать последнюю версию Symfony - 4.2 на данный момент. Если вы хотите использовать установленный, просто запустите: composer show symfony/asset, чтобы найти версию.


Кстати, не волнуйся. Делать это нужно только раз в ~ 2 года :)

Большое спасибо за ваш ответ. На самом деле я пишу сценарий travis ci для проверки composer.json после каждого нового установленного пакета. Итак, использую ли я composer show symfony/asset или напрямую копирую версию с composer.lock, как она там уже указана? Вопрос: следует ли проверять composer.json и composer.lock в качестве хорошей практики или достаточно только composer.lock?

famas23 10.12.2018 13:39

В этом случае 1) удалите composer.lock, 2) затем измените версию в composer.json на 4.2, 3) затем запустите composer install. Таким образом, у вас будут действующие версии в обоих файлах composer.*.

Tomas Votruba 10.12.2018 13:42

1) Я могу просто запустить composer update --lock. В целом, рекомендуется ли проверять оба файла? потому что я думаю, что каждый раз, когда я устанавливаю новый пакет, и пакет помечен тегом "*" ... В этом случае я вынужден переопределить точную версию. Думаю о таком варианте, как --no-check-all, чтобы пропустить .json file validation ... Это хорошая или плохая идея?

famas23 10.12.2018 13:48

Используйте только composer.json. composer.lock предназначен для внутренних нужд композитора, а не для вас. Каждый раз, когда вы устанавливаете новый пакет, композитор сам выбирает самую высокую версию: composer require package/name. Понятия не имею, как вы получили версию *, если не вручную :)

Tomas Votruba 10.12.2018 13:53

Вероятно, вам не хватает раздела extra в вашем composer.json, который определяет, какую версию Symfony использовать для зависимостей. Они изменили его для 4.x, чтобы не каждый пакет использовал ограничение версии, чтобы было проще обновить всю структуру до другой версии, но в то же время сохраняя все компоненты Symfony в одной версии.

Попробуйте добавить это в файл composer.json и запустить composer update:

"extra": {
    "symfony": {
        "require": "^4.2"
    }
}

Обновлено: Извините, я упустил из виду, что вы используете composer validate. По-видимому, это не принимает во внимание определение extra, которое на самом деле является лишь подсказкой для плагина Flex Composer, поэтому оно не распознается самим Composer.

Спасибо за ответ, у меня уже есть лишний раздел. Но из какой версии вводится этот раздел?

famas23 10.12.2018 17:25

Это функция Flex. Он работает для update, но явно не для validate. Вам не нужно устанавливать точную версию используемой вами платформы, просто используйте разумное ограничение версии. Или скопируйте тот, который определен в «дополнительном» разделе. Если это 4.1.*, просто замените все звездочки (неограниченные ограничения) на него, и все будет в порядке. Если вам нужен Symfony 4.2, используйте 4.2.* или ^4.2.

YetiCGN 10.12.2018 17:29

Я не понял ... На самом деле у меня есть только версия Symfony под extra, остальные под 'require'. Итак, чтобы исправить это, нам нужно заменить все звездочки под composer.json. посмотрите gist.githubusercontent.com/ahmed-bhs/…

famas23 10.12.2018 17:48

да. Замените все "*" для пакетов, начинающихся с symfony/, на "4.2.*". Вы потеряете возможность изменить версию, отредактировав только одну строку, но composer validate не выйдет из строя снова.

YetiCGN 10.12.2018 18:00

Это как раствор Томаса, так что. все равно спасибо :) Мог бы хоть переформатировать ответ, чтобы проголосовать за это.

famas23 10.12.2018 18:15

Большое спасибо за вашу помощь, очень признателен ^^

famas23 11.12.2018 11:10

Другие вопросы по теме