编写器- PHP检查是否编写器.Json需要更新



想问一下,我做了一个简单的php脚本,当新的代码集被推送到工作良好的存储库时,从bitbucket自动部署。但有时会对composer.json文件进行更改。所以我现在所做的是每次PHP脚本被触发时调用exec('composer update'),这可能是耗时的,即使没有对composer.json文件进行任何更改。

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

是否有任何方法,我可以调用PHP来检查是否作曲家。Json文件已更改,然后只执行exec('composer update') ?

我建议使用"git diff"命令对repo中的一个文件进行历史检查,或者比较/检查文件的修改日期。

例子:

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

如果返回文件名,则表示该文件在提交范围内被修改。

您可能需要更改提交的数量,diff回到历史中查找更改,但这里有一个粗略的草稿让您开始:

<?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文件推送到repo并从运行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.

相关内容

  • 没有找到相关文章

最新更新