Во время разработки (несколько человек в команде) иногда composer install
:
Внимание: файл блокировки не обновляется с последними изменениями в composer.json. Вы можете получать устаревшие зависимости. Запустите обновление, чтобы обновить их.
Есть ли способ проверить это очень быстро (в миллисекундах, без каких-либо изменений)?
Я понимаю, как работает композитор. Однако при слиянии кода в нем не обязательно возникают конфликты слияния в файле composer.json
или composer.lock
и не сложно запускать composer install
все время, когда theres почти никогда не изменяется, и эта команда занимает несколько минут.
Если я могу быстро протестировать, если ошибка сбоя выпала из синхронизации, я могу создать ее в среде bash, чтобы уведомлять каждую команду. Подобно тому, как люди, как их git status
должны быть встроены в их подсказку bash.
Более того, это имеет смысл в CI, чтобы убедиться, что он пробирается к устойчивой ветке.
Расширение от @Domster, решение в чистом bash:
COMPOSER_IN_SYNC=$(expr "`cat composer.lock | grep '"hash":' | cut -d'"' -f4`" = "`md5sum composer.json | cut -d ' ' -f 1`")
$COMPOSER_IN_SYNC
будет 0
или 1
соответственно.
Да, есть способ проверить это очень быстро.
«Устаревшая» проверка основана на хеше содержимого composer.json
, хранящемся в composer.lock
. Там нет соли, и это прямолинейный хеш содержимого, так что это очень и очень легко сделать.
<?php $lock = json_decode(file_get_contents('composer.lock'))->hash; $json = md5(file_get_contents('composer.json')); if ($lock !== $json) { echo "Lock file out of date\n"; exit(1); } echo "Lock file up to date\n"; exit(0);
Вы можете запустить
composer install --dry-run
–dry-run Выводит операции, но ничего не выполняет (неявно разрешает –verbose).
Это ничего не изменит, но покажет предупреждение, если оно не обновлено. Но по-прежнему придется проверять серверы на наличие новых версий установленных пакетов, поэтому, если у вас много установленных, это может занять больше миллисекунды. Во всяком случае, это быстрее.
в более новых версиях (я полагаю, 1.3+) вы можете запустить следующее:
$ composer validate --no-check-all --no-check-publish
Что могло бы вывести что-то вроде этого (с уловимым кодом выхода ошибки):
./composer.json is valid for simple usage with composer but has strict errors that make it unable to be published as a package: See https://getcomposer.org/doc/04-schema.md for details on the schema The lock file is not up to date with the latest changes in composer.json, it is recommended that you run `composer update`.