У меня под 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, спасибо, interraction, я думаю, это поведение композитора после установки зависимостей. Любая идея, как это исправить
Забыл, что это ограничено внутренне. Вы можете проигнорировать это предупреждение, так как это не ошибка.
Это может быть решено для новых проектов с помощью Flex 1.1: github.com/symfony/flex/issues/421




Вы можете использовать следующую команду, чтобы обновить его до последних версий
composer update
Но я бы рекомендовал иметь пакеты для конкретной версии вместо "*", чтобы избежать конфликта с будущими пакетами.
композитор упадате не решит проблему. Спасибо за вашу попытку :)
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?
В этом случае 1) удалите composer.lock, 2) затем измените версию в composer.json на 4.2, 3) затем запустите composer install. Таким образом, у вас будут действующие версии в обоих файлах composer.*.
1) Я могу просто запустить composer update --lock. В целом, рекомендуется ли проверять оба файла? потому что я думаю, что каждый раз, когда я устанавливаю новый пакет, и пакет помечен тегом "*" ... В этом случае я вынужден переопределить точную версию. Думаю о таком варианте, как --no-check-all, чтобы пропустить .json file validation ... Это хорошая или плохая идея?
Используйте только composer.json. composer.lock предназначен для внутренних нужд композитора, а не для вас. Каждый раз, когда вы устанавливаете новый пакет, композитор сам выбирает самую высокую версию: composer require package/name. Понятия не имею, как вы получили версию *, если не вручную :)
Вероятно, вам не хватает раздела extra в вашем composer.json, который определяет, какую версию Symfony использовать для зависимостей. Они изменили его для 4.x, чтобы не каждый пакет использовал ограничение версии, чтобы было проще обновить всю структуру до другой версии, но в то же время сохраняя все компоненты Symfony в одной версии.
Попробуйте добавить это в файл composer.json и запустить composer update:
"extra": {
"symfony": {
"require": "^4.2"
}
}
Обновлено: Извините, я упустил из виду, что вы используете composer validate. По-видимому, это не принимает во внимание определение extra, которое на самом деле является лишь подсказкой для плагина Flex Composer, поэтому оно не распознается самим Composer.
Спасибо за ответ, у меня уже есть лишний раздел. Но из какой версии вводится этот раздел?
Это функция Flex. Он работает для update, но явно не для validate. Вам не нужно устанавливать точную версию используемой вами платформы, просто используйте разумное ограничение версии. Или скопируйте тот, который определен в «дополнительном» разделе. Если это 4.1.*, просто замените все звездочки (неограниченные ограничения) на него, и все будет в порядке. Если вам нужен Symfony 4.2, используйте 4.2.* или ^4.2.
Я не понял ... На самом деле у меня есть только версия Symfony под extra, остальные под 'require'. Итак, чтобы исправить это, нам нужно заменить все звездочки под composer.json. посмотрите gist.githubusercontent.com/ahmed-bhs/…
да. Замените все "*" для пакетов, начинающихся с symfony/, на "4.2.*". Вы потеряете возможность изменить версию, отредактировав только одну строку, но composer validate не выйдет из строя снова.
Это как раствор Томаса, так что. все равно спасибо :) Мог бы хоть переформатировать ответ, чтобы проголосовать за это.
Большое спасибо за вашу помощь, очень признателен ^^
Во-первых, это ужасная идея - требовать
*.