Files
eSIM-Tools/scripts/update-script-logging.js
Abner 4a0fcc94fe feat: 重构Netlify Functions架构并增强代码质量
- 新增统一的中间件模块,提供鉴权、CORS和错误处理功能
- 重构所有Functions使用withAuth中间件简化代码结构
- 添加安全存储模块替代localStorage,防御XSS攻击
- 引入HTML清理工具,自动转义特殊字符和验证URL安全性
- 创建代码质量检查脚本,验证语法、环境变量和依赖完整性
- 添加构建日志工具和重构脚本,统一替换console.log为Logger
- 引入ESLint配置,提升代码质量和一致性
- 重构Giffgaff相关API,统一错误处理和验证逻辑
- 优化构建脚本,添加压缩和图片优化功能
- 新增健康检查端点,用于服务监控和状态报告
2025-11-23 22:20:02 +08:00

129 lines
4.3 KiB
JavaScript

#!/usr/bin/env node
/**
* 更新构建脚本中的console日志为BuildLogger
* 仅替换普通的console.log,保留console.error和console.warn
*/
const fs = require('fs');
const path = require('path');
// 需要处理的脚本文件
const SCRIPTS_TO_UPDATE = [
'build-static.js',
'deploy-prepare.js',
'deploy-analyze.js',
'test-deploy-config.js',
'optimize-images.js',
'compress.js',
'security-check.js'
];
// 需要排除的文件
const EXCLUDE_FILES = [
'logger.js',
'replace-console-log.js',
'update-script-logging.js'
];
function updateScriptLogging(filePath) {
try {
let content = fs.readFileSync(filePath, 'utf8');
const originalContent = content;
// 检查是否已经导入了BuildLogger
const hasLoggerImport = /const\s+(?:BuildLogger|Logger)\s*=\s*require/.test(content);
// 检查是否有console.log需要替换
const hasConsoleLog = /console\.log\s*\(/.test(content);
if (!hasConsoleLog) {
console.log(`⏭️ 跳过 ${path.basename(filePath)} - 无console.log`);
return { replaced: false };
}
// 替换console.log为BuildLogger.log
// 识别带emoji的success消息
content = content.replace(/console\.log\((['"`])✅([^'"`]*)\1\)/g, 'BuildLogger.success(\'$2\')');
content = content.replace(/console\.log\((['"`])❌([^'"`]*)\1\)/g, 'BuildLogger.error(\'$2\')');
content = content.replace(/console\.log\((['"`])⚠️([^'"`]*)\1\)/g, 'BuildLogger.warn(\'$2\')');
content = content.replace(/console\.log\((['"`])🔧([^'"`]*)\1\)/g, 'BuildLogger.log(\'🔧$2\')');
content = content.replace(/console\.log\((['"`])📊([^'"`]*)\1\)/g, 'BuildLogger.log(\'📊$2\')');
// 替换剩余的console.log
content = content.replace(/console\.log\s*\(/g, 'BuildLogger.log(');
// 如果还没有导入BuildLogger,在文件开头添加导入
if (!hasLoggerImport && hasConsoleLog) {
// 在第一个require之后或文件开头添加
const importStatement = `const BuildLogger = require('./logger.js');\n`;
if (/^const\s+/.test(content)) {
// 在最后一个require之后添加
const lastRequireMatch = content.match(/const\s+\w+\s*=\s*require\([^)]+\);?/g);
if (lastRequireMatch && lastRequireMatch.length > 0) {
const lastRequire = lastRequireMatch[lastRequireMatch.length - 1];
const lastRequireIndex = content.lastIndexOf(lastRequire);
const insertIndex = lastRequireIndex + lastRequire.length;
content = content.slice(0, insertIndex) + '\n' + importStatement + content.slice(insertIndex);
} else {
content = importStatement + content;
}
} else {
content = importStatement + '\n' + content;
}
}
if (content !== originalContent) {
fs.writeFileSync(filePath, content, 'utf8');
const count = (originalContent.match(/console\.log\s*\(/g) || []).length;
console.log(`${path.basename(filePath)} - 替换了${count}处console.log`);
return { replaced: true, count };
} else {
console.log(`⏭️ 跳过 ${path.basename(filePath)} - 无需修改`);
return { replaced: false };
}
} catch (error) {
console.error(`❌ 处理 ${path.basename(filePath)} 失败:`, error.message);
return { replaced: false, error: true };
}
}
function main() {
console.log('🚀 开始更新构建脚本日志...\n');
let totalFiles = 0;
let replacedFiles = 0;
let totalReplacements = 0;
SCRIPTS_TO_UPDATE.forEach(filename => {
const filePath = path.join(__dirname, filename);
if (!fs.existsSync(filePath)) {
console.log(`⏭️ 跳过 ${filename} - 文件不存在`);
return;
}
if (EXCLUDE_FILES.includes(filename)) {
console.log(`⏭️ 跳过 ${filename} - 已排除`);
return;
}
totalFiles++;
const result = updateScriptLogging(filePath);
if (result.replaced) {
replacedFiles++;
totalReplacements += result.count || 0;
}
});
console.log('\n📊 替换统计:');
console.log(` 总文件数: ${totalFiles}`);
console.log(` 已修改文件: ${replacedFiles}`);
console.log(` console.log替换数: ${totalReplacements}`);
console.log('\n✨ 完成!');
console.log('\n💡 提示: 构建脚本的日志现在使用带颜色的BuildLogger输出');
}
main();