diff --git a/extend/base/admin/service/AdminUpdateServiceBase.php b/extend/base/admin/service/AdminUpdateServiceBase.php index 23eeebb..4e4da10 100644 --- a/extend/base/admin/service/AdminUpdateServiceBase.php +++ b/extend/base/admin/service/AdminUpdateServiceBase.php @@ -341,15 +341,8 @@ class AdminUpdateServiceBase $output->writeln("统计: 新增 {$add_count}, 删除 {$delete_count}, 更新 {$update_count}"); } - // 检测now的composer依赖和最新的composer依赖 - $last_composer_json = file_get_contents($last_version_dir . '/composer.json'); - - $output->writeln($last_composer_json); - $output->writeln('请参考以上最新composer文件调整您的依赖'); - - // 分析出最新需要的但now没有的 - - // 为用户整理出要手动调整的composer命令 + // 对比 composer.json 依赖差异 + $this->compareComposerRequire($current_version_dir, $last_version_dir, $output); $output->writeln('更新完成'); // 更新完成 @@ -486,4 +479,65 @@ class AdminUpdateServiceBase } closedir($handle); } + + protected function compareComposerRequire(string $current_dir, string $last_dir, Output $output): void + { + $current_composer_path = $current_dir . '/composer.json'; + $last_composer_path = $last_dir . '/composer.json'; + + if (!file_exists($last_composer_path)) { + return; + } + + $last_composer = json_decode(file_get_contents($last_composer_path), true); + $current_composer = file_exists($current_composer_path) + ? json_decode(file_get_contents($current_composer_path), true) + : []; + + if (!$last_composer || !is_array($last_composer)) { + return; + } + + $last_require = $last_composer['require'] ?? []; + $current_require = ($current_composer && is_array($current_composer)) + ? ($current_composer['require'] ?? []) + : []; + + if (empty($last_require) && empty($current_require)) { + return; + } + + $output->writeln(''); + $output->writeln('Composer 依赖变更:'); + + $has_changes = false; + + // 新增的依赖 + $new_packages = array_diff_key($last_require, $current_require); + foreach ($new_packages as $package => $version) { + $output->writeln(" composer require {$package}:{$version}"); + $has_changes = true; + } + + // 删除的依赖 + $removed_packages = array_diff_key($current_require, $last_require); + foreach ($removed_packages as $package => $version) { + $output->writeln(" composer remove {$package}"); + $has_changes = true; + } + + // 版本变更的依赖 + $common_packages = array_intersect_key($last_require, $current_require); + foreach ($common_packages as $package => $last_version) { + $current_version = $current_require[$package]; + if ($current_version !== $last_version) { + $output->writeln(" composer require {$package}:{$last_version} (版本变更, 旧版: {$current_version})"); + $has_changes = true; + } + } + + if (!$has_changes) { + $output->writeln(' composer 依赖无变化'); + } + } }