Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何测试composer.lock是否是最新的?_Php_Bash_Composer Php - Fatal编程技术网

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`.