Composer - PHP 检查composer.json 是否需要更新

问题描述 投票:0回答:2

我想问一下,我制作了一个简单的 php 脚本,当新的代码集被推送到存储库时,它可以从 bitbucket 自动部署,工作正常。但有时会对

composer.json
文件进行更改。所以我现在所做的就是每次触发 PHP 脚本时调用
exec('composer update')
,即使没有对
composer.json
文件进行任何更改,这也可能很耗时。

有什么方法可以调用PHP来检查

composer.json
文件是否已更改然后只执行
exec('composer update')

php json composer-php
2个回答
3
投票

有什么方法可以调用PHP来检查composer.json文件是否已更改然后只执行exec('composer update')?

我建议使用“git diff”仅对存储库中的一个文件进行历史记录检查,或比较/检查文件的修改日期。

示例:

  • git --no-pager diff --name-only HEAD~50 -- ./composer.json
    • 检查composer.json在最近50次提交(HEAD)内是否被更改
  • git --no-pager diff --name-only origin/master~15 -- ./composer.json
    • 检查composer.json在最近15次提交(主分支)内是否被更改

如果返回文件名,则文件在提交范围内被更改。

您可能需要更改差异在历史记录中返回的提交数量以寻找更改,但这里有一个粗略的草案可以帮助您开始:

<?php

function fileChanged() {
    $cmd = 'git --no-pager diff --name-only HEAD~50 -- ./composer.json';
    exec($cmd, $output);
    return ($output[0] === 'composer.json') ? true : false;
}

if(fileChanged()) {
   exec('composer update');
} else {
   echo 'Found no change to "composer.json" with 50 commits. Skipping "composer update"';
}

此外,对于自动部署,将

composer.lock
文件推送到存储库并从运行
composer update
切换到
composer install
可能会有所帮助,因为 Composer 不需要进行依赖项解析和版本查找,从而提高了部署速度。

跑步

composer install
将会:

  • 检查是否存在
    composer.lock
    • 如果没有,请执行
      composer update
      创建它
  • 如果
    composer.lock
    存在,从锁定文件安装指定版本

跑步

composer update
将会:

  • 检查
    composer.json
  • 根据您的版本规格确定要安装的最新版本
  • 安装最新版本
  • 更新
    composer.lock
    以反映安装的最新版本

旁注:我记得 Github 跟踪器上有一个类似或非常接近的功能请求 (

--install-only-if-changed
):https://github.com/composer/composer/issues/3888.


0
投票

我已经在 https://stackoverflow.com/a/77334505/22777518 中回答,仅当使用

composer install
+
composer.json
+
composer.lock
更改
sha1sum
git
时才运行
bash
脚本。

如果您愿意,您可以参考该答案并使用

composer update

© www.soinside.com 2019 - 2024. All rights reserved.