在开发期间(团队中有多个人),有时composer install
会返回:
警告:锁定文件与composer.json中的最新更改不是最新的。您可能会过时的依赖项。运行更新以更新它们。
有没有办法快速检查(以毫秒为单位,不做任何更改)?
我理解作曲家是如何运作的。但是,当代码合并在一起时,并不一定会导致composer.json
或composer.lock
文件上的合并冲突,并且当所有时间几乎从不进行任何更改时运行composer install
并不是很有趣需要几分钟。
如果我能够快速测试锁定失败是否已经失去同步,我可以将其构建到bash环境中以通知每个命令。类似于人们喜欢将他们的git status
构建到他们的bash提示符中。
更进一步,这在CI中是有道理的,以确保它可以潜入稳定的分支。
答案 0 :(得分:8)
对于作曲家< 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);
答案 1 :(得分:7)
你可以运行
composer install --dry-run
- dry-run 输出操作但不执行任何操作(隐式启用--verbose)。
这不会改变任何内容,但如果不是最新的话会显示警告。但它仍然需要检查服务器是否有新版本的已安装软件包,因此如果您安装了许多软件包,这可能仍需要超过几毫秒。无论如何它更快。
答案 2 :(得分:7)
对于作曲家&lt; 1.3.0
从@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
。
答案 3 :(得分:6)
在较新版本(我想1.3+)上,您可以运行以下命令:
./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`.
可能会输出类似的内容(带有可捕获的错误退出代码):
Well A B C D
Production 1 2 3 4