- ✅ 成功运行迁移工具,生成28个模块的完整NestJS代码 - ✅ 生成所有实体、服务、控制器、验证器等组件 - ✅ 修复npm依赖冲突,更新package-lock.json - ✅ 添加Docker测试脚本和配置文件 - ✅ 完善迁移工具的调试日志和错误处理 - 🔧 包含增量更新工具和质量检查工具 - 📊 迁移统计:28个模块,数千个文件,耗时26.47秒 主要变更: - wwjcloud-nest/src/core/* - 生成的业务模块代码 - tools/* - 迁移工具和辅助脚本 - wwjcloud-nest/package.json - 依赖更新 - docker/* - 容器化配置和测试脚本
186 lines
4.9 KiB
JavaScript
Executable File
186 lines
4.9 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
||
|
||
const IncrementalUpdater = require('./incremental-updater');
|
||
|
||
/**
|
||
* 🔄 增量更新命令行工具
|
||
* 提供独立的增量更新功能入口
|
||
*/
|
||
|
||
function showHelp() {
|
||
console.log(`
|
||
🔄 增量更新工具 - WWJCloud PHP to NestJS
|
||
|
||
用法:
|
||
node incremental-update-cli.js [选项]
|
||
|
||
选项:
|
||
--help, -h 显示帮助信息
|
||
--dry-run 干运行模式,不实际修改文件
|
||
--verbose, -v 详细输出模式
|
||
--force 强制更新,忽略冲突警告
|
||
--backup 创建备份(默认启用)
|
||
--no-backup 不创建备份
|
||
|
||
环境变量:
|
||
DRY_RUN=true 启用干运行模式
|
||
VERBOSE=true 启用详细输出
|
||
FORCE=true 启用强制模式
|
||
|
||
示例:
|
||
# 基本增量更新
|
||
node incremental-update-cli.js
|
||
|
||
# 干运行模式(查看将要进行的更改)
|
||
node incremental-update-cli.js --dry-run
|
||
|
||
# 详细输出模式
|
||
node incremental-update-cli.js --verbose
|
||
|
||
# 强制更新模式
|
||
node incremental-update-cli.js --force
|
||
|
||
# 使用环境变量
|
||
DRY_RUN=true node incremental-update-cli.js
|
||
|
||
功能特性:
|
||
✅ 智能变更检测 - 基于文件哈希和时间戳
|
||
✅ 用户代码保护 - 自动检测和保护用户自定义代码
|
||
✅ 三路合并算法 - 智能合并PHP变更和用户修改
|
||
✅ 冲突处理机制 - 自动标记和处理合并冲突
|
||
✅ 备份恢复功能 - 自动创建备份,支持快速恢复
|
||
✅ 增量状态跟踪 - 记录更新历史和文件状态
|
||
✅ 详细更新报告 - 提供完整的更新统计和结果
|
||
|
||
注意事项:
|
||
- 首次运行将建立基线状态
|
||
- 建议在重要更新前手动备份
|
||
- 冲突文件需要手动解决
|
||
- 支持回滚到任意历史版本
|
||
`);
|
||
}
|
||
|
||
async function main() {
|
||
const args = process.argv.slice(2);
|
||
|
||
// 处理帮助选项
|
||
if (args.includes('--help') || args.includes('-h')) {
|
||
showHelp();
|
||
return;
|
||
}
|
||
|
||
// 解析命令行参数
|
||
const options = {
|
||
dryRun: args.includes('--dry-run') || process.env.DRY_RUN === 'true',
|
||
verbose: args.includes('--verbose') || args.includes('-v') || process.env.VERBOSE === 'true',
|
||
force: args.includes('--force') || process.env.FORCE === 'true',
|
||
backup: !args.includes('--no-backup')
|
||
};
|
||
|
||
console.log('🔄 WWJCloud 增量更新工具');
|
||
console.log('==================================================');
|
||
|
||
if (options.dryRun) {
|
||
console.log('🔍 运行模式: 干运行 (不会实际修改文件)');
|
||
}
|
||
|
||
if (options.verbose) {
|
||
console.log('📝 输出模式: 详细输出');
|
||
}
|
||
|
||
if (options.force) {
|
||
console.log('⚡ 更新模式: 强制更新');
|
||
}
|
||
|
||
if (!options.backup) {
|
||
console.log('⚠️ 备份模式: 已禁用备份');
|
||
}
|
||
|
||
console.log('==================================================\n');
|
||
|
||
try {
|
||
// 设置环境变量
|
||
if (options.dryRun) {
|
||
process.env.DRY_RUN = 'true';
|
||
}
|
||
|
||
if (options.verbose) {
|
||
process.env.VERBOSE = 'true';
|
||
}
|
||
|
||
if (options.force) {
|
||
process.env.FORCE = 'true';
|
||
}
|
||
|
||
if (!options.backup) {
|
||
process.env.NO_BACKUP = 'true';
|
||
}
|
||
|
||
// 创建并运行增量更新器
|
||
const updater = new IncrementalUpdater();
|
||
const success = await updater.run();
|
||
|
||
if (success) {
|
||
console.log('\n✅ 增量更新成功完成!');
|
||
|
||
if (options.dryRun) {
|
||
console.log('\n💡 提示: 这是干运行模式,没有实际修改文件');
|
||
console.log(' 要执行实际更新,请移除 --dry-run 参数');
|
||
}
|
||
|
||
process.exit(0);
|
||
} else {
|
||
console.log('\n❌ 增量更新失败');
|
||
process.exit(1);
|
||
}
|
||
|
||
} catch (error) {
|
||
console.error('\n💥 增量更新过程中发生错误:');
|
||
console.error(error.message);
|
||
|
||
if (options.verbose) {
|
||
console.error('\n📋 详细错误信息:');
|
||
console.error(error.stack);
|
||
}
|
||
|
||
console.log('\n🔧 故障排除建议:');
|
||
console.log('1. 检查PHP项目路径是否正确');
|
||
console.log('2. 检查NestJS项目路径是否正确');
|
||
console.log('3. 确保有足够的文件系统权限');
|
||
console.log('4. 尝试使用 --dry-run 模式查看详细信息');
|
||
console.log('5. 查看备份目录是否有可恢复的版本');
|
||
|
||
process.exit(1);
|
||
}
|
||
}
|
||
|
||
// 处理未捕获的异常
|
||
process.on('unhandledRejection', (reason, promise) => {
|
||
console.error('💥 未处理的Promise拒绝:', reason);
|
||
process.exit(1);
|
||
});
|
||
|
||
process.on('uncaughtException', (error) => {
|
||
console.error('💥 未捕获的异常:', error);
|
||
process.exit(1);
|
||
});
|
||
|
||
// 处理中断信号
|
||
process.on('SIGINT', () => {
|
||
console.log('\n\n⏹️ 用户中断操作');
|
||
console.log('增量更新已停止');
|
||
process.exit(0);
|
||
});
|
||
|
||
process.on('SIGTERM', () => {
|
||
console.log('\n\n⏹️ 收到终止信号');
|
||
console.log('增量更新已停止');
|
||
process.exit(0);
|
||
});
|
||
|
||
// 运行主程序
|
||
if (require.main === module) {
|
||
main();
|
||
}
|
||
|
||
module.exports = { main, showHelp }; |