// UTS Android 兼容性修复脚本 // 该脚本用于批量修复 pages/ec/ 下所有 .uvue 文件的 UTS Android 兼容性问题 const fs = require('fs'); const path = require('path'); // 定义修复规则 const fixRules = [ // 1. 数组类型从 Type[] 改为 Array { pattern: /ref<(\w+)\[\]>/g, replacement: 'ref>' }, { pattern: /computed<(\w+)\[\]>/g, replacement: 'computed>' }, { pattern: /: (\w+)\[\]/g, replacement: ': Array<$1>' }, // 2. 可选属性从 ? 改为 | null { pattern: /(\w+)\?:\s*(\w+)/g, replacement: '$1: $2 | null' }, // 3. 空值判断从 == null 改为 === null { pattern: /== null/g, replacement: '=== null' }, { pattern: /!= null/g, replacement: '!== null' }, // 4. 逻辑判断从 if (variable) 改为 if (variable !== null) { pattern: /if\s*\(\s*(\w+)\s*\)/g, replacement: 'if ($1 !== null)' }, // 5. for 循环的 i 添加类型 { pattern: /for\s*\(\s*let\s+i\s*=/g, replacement: 'for (let i: Int =' }, // 6. CSS 中的 vh 单位替换为固定像素 { pattern: /min-height:\s*100vh/g, replacement: 'min-height: 600px' }, { pattern: /height:\s*100vh/g, replacement: 'height: 600px' }, // 7. 删除不支持的 CSS 属性 { pattern: /gap:\s*[^;]+;/g, replacement: '' }, { pattern: /display:\s*grid[^;]*;/g, replacement: 'display: flex;' } ]; // 处理单个文件 function processFile(filePath) { try { let content = fs.readFileSync(filePath, 'utf8'); let modified = false; // 应用所有修复规则 fixRules.forEach(rule => { const newContent = content.replace(rule.pattern, rule.replacement); if (newContent !== content) { content = newContent; modified = true; } }); // 如果文件被修改,写回文件 if (modified) { fs.writeFileSync(filePath, content, 'utf8'); console.log(`✅ 已修复: ${filePath}`); return true; } else { console.log(`⏭️ 无需修改: ${filePath}`); return false; } } catch (error) { console.error(`❌ 处理文件失败 ${filePath}:`, error.message); return false; } } // 递归处理目录 function processDirectory(dirPath) { const items = fs.readdirSync(dirPath); let totalFiles = 0; let modifiedFiles = 0; items.forEach(item => { const fullPath = path.join(dirPath, item); const stat = fs.statSync(fullPath); if (stat.isDirectory()) { const [subTotal, subModified] = processDirectory(fullPath); totalFiles += subTotal; modifiedFiles += subModified; } else if (item.endsWith('.uvue')) { totalFiles++; if (processFile(fullPath)) { modifiedFiles++; } } }); return [totalFiles, modifiedFiles]; } // 主函数 function main() { const targetDir = path.join(__dirname, 'pages', 'ec'); if (!fs.existsSync(targetDir)) { console.error('❌ pages/ec 目录不存在'); return; } console.log('🚀 开始修复 UTS Android 兼容性问题...'); console.log(`📂 目标目录: ${targetDir}`); const [totalFiles, modifiedFiles] = processDirectory(targetDir); console.log('\n📊 修复完成统计:'); console.log(`📄 总文件数: ${totalFiles}`); console.log(`✅ 修改文件数: ${modifiedFiles}`); console.log(`⏭️ 无需修改: ${totalFiles - modifiedFiles}`); if (modifiedFiles > 0) { console.log('\n🎉 UTS Android 兼容性修复完成!'); } else { console.log('\n✨ 所有文件已符合 UTS Android 标准'); } } // 运行脚本 main();