Ell*_*nce 8 php bash composer-php
在开发期间(团队中的多个人)有时会composer install返回:
警告:锁定文件与composer.json中的最新更改不是最新的.您可能会过时的依赖项.运行更新以更新它们.
有没有办法快速检查(毫秒,没有做任何更改)?
我理解作曲家是如何运作的.但是,当代码合并在一起时,并不一定会导致composer.json或composer.lock文件上的合并冲突,并且composer install当几乎从不进行任何更改并且该命令需要几分钟时,一直运行并不好玩.
如果我能够快速测试锁定失败是否已经失去同步,我可以将其构建到bash环境中以通知每个命令.类似于人们喜欢将他们git status建立在他们的bash提示中的方式.
更进一步,这在CI中是有意义的,以确保它确实潜入稳定分支.
在较新的版本(我想1.3+)你可以运行以下:
$ composer validate --no-check-all --no-check-publish
Run Code Online (Sandbox Code Playgroud)
哪个可能输出这样的东西(带有可捕获的错误退出代码):
./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`.
Run Code Online (Sandbox Code Playgroud)
你可以跑
composer install --dry-run
Run Code Online (Sandbox Code Playgroud)
--dry-run输出操作但不执行任何操作(隐式启用--verbose).
这不会改变任何东西,但如果不是最新的则会显示警告.但它仍然需要检查服务器是否有新版本的已安装软件包,因此如果您安装了许多软件包,这可能仍需要超过几毫秒.无论如何它更快.
对于作曲家<1.3.0
是的,有一种方法可以很快检查这一点.
"过时"检查基于内容的哈希值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);
Run Code Online (Sandbox Code Playgroud)
对于作曲家<1.3.0
从@Domster扩展,纯粹的bash解决方案:
COMPOSER_IN_SYNC=$(expr "`cat composer.lock | grep '"hash":' | cut -d'"' -f4`" = "`md5sum composer.json | cut -d ' ' -f 1`")
Run Code Online (Sandbox Code Playgroud)
$COMPOSER_IN_SYNC将是0或将1分别.