Php 如何测试composer.lock是否是最新的?
在开发过程中(团队中有多人),有时Php 如何测试composer.lock是否是最新的?,php,bash,composer-php,Php,Bash,Composer Php,在开发过程中(团队中有多人),有时composer安装会返回: 警告:锁文件不是composer.json中最新更改的最新版本。您可能会得到过时的依赖项。运行更新以更新它们。 有没有一种方法可以非常快速地检查(以毫秒为单位,不做任何更改) 我了解这位作曲家的作品。但是,当代码合并到中时,它不一定会在composer.json或composer.lock文件上引起合并冲突,并且在几乎没有任何更改的情况下始终运行composer install并不是一件有趣的事情,该命令需要几分钟 如果我能够快速测
composer安装
会返回:
警告:锁文件不是composer.json中最新更改的最新版本。您可能会得到过时的依赖项。运行更新以更新它们。
有没有一种方法可以非常快速地检查(以毫秒为单位,不做任何更改)
我了解这位作曲家的作品。但是,当代码合并到中时,它不一定会在composer.json
或composer.lock
文件上引起合并冲突,并且在几乎没有任何更改的情况下始终运行composer install
并不是一件有趣的事情,该命令需要几分钟
如果我能够快速测试锁失败是否已经失去同步,我可以将它构建到bash环境中,以通知每个命令。类似于人们希望在bash提示符中内置git状态的方式
此外,这在CI中是有意义的,以确保它确实潜入稳定分支。您可以运行
composer install --dry-run
--dry run输出操作,但不执行任何操作(隐式启用--verbose)
这不会更改任何内容,但如果不是最新的,将显示警告。但是它仍然需要检查服务器上安装的软件包的新版本,因此如果您安装了许多软件包,这可能仍然需要超过毫秒的时间。无论如何,速度更快
作曲家<1.3.0
是的,有一种方法可以快速检查
“过期”检查基于存储在composer.lock
中的composer.json
内容的散列。这里并没有盐,而且它是内容的直接散列,所以它非常非常容易做到
<?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.3.0
从纯bash中的解决方案@Domster扩展而来:
COMPOSER_IN_SYNC=$(expr "`cat composer.lock | grep '"hash":' | cut -d'"' -f4`" = "`md5sum composer.json | cut -d ' ' -f 1`")
$COMPOSER\u IN_SYNC
将分别为0
或1
。在较新版本(我假设为1.3+)上,您可以运行以下操作:
$ composer validate --no-check-all --no-check-publish
这可能会输出如下内容(带有可捕获的错误退出代码):
我假设您使用某种版本控制系统(例如Git)。除了composer.json文件之外,您还提交composer.lock吗?还是被忽视了?天才!我可以从中派生出一个纯粹的bash解决方案,我将发布这个解决方案。在composer v1.3.0-RC()之前,这个解决方案工作得非常好,它删除了“hash”属性,只留下了“content hash”,计算起来有点复杂。这里是“内容散列”计算方法:请参阅下面我对Domster解决方案的评论。这在composer v1.3.0-RC之前一直有效,它删除了“hash”属性。这是最好的答案。谢谢这正是我想要的。我将在Jenkins部署作业中包含该命令,以便在composer.lock不是最新的情况下停止它。谢谢
./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`.