const fs = require('fs'); const path = 'D:\\project\\zhizhu\\components\\PhotoUploadForm.vue'; const content = fs.readFileSync(path, 'utf8'); const lines = content.split('\n'); // 从 export default 开始追踪 let exportStart = -1; for (let i = 0; i < lines.length; i++) { if (lines[i].includes('export default {')) { exportStart = i; break; } } // 从 export default + 1 开始计数 let braceCount = 0; let prevCount = 0; let inImport = false; for (let i = exportStart; i < lines.length; i++) { const line = lines[i]; // 跳过 import(不应该出现在 export 内部,但以防万一) if (line.includes('import ')) continue; // 跳过注释 const codeOnly = line.replace(/\/\/.*$/, '').replace(/\/\*.*?\*\//g, ''); // 跳过字符串中的括号 const noStrings = codeOnly.replace(/'[^']*'/g, '""').replace(/"[^"]*"/g, '""').replace(/`[^`]*`/g, '""'); const opens = (noStrings.match(/{/g) || []).length; const closes = (noStrings.match(/}/g) || []).length; prevCount = braceCount; braceCount += opens - closes; // 当 braceCount 从 1 变到 2 时,记录区域开始 if (prevCount === 1 && braceCount === 2) { console.log(`\n>>> Section starts at line ${i + 1}: ${line.trim()}`); } // 当 braceCount 从 2 变到 1 时,记录区域结束 if (prevCount === 2 && braceCount === 1) { console.log(`<<< Section ends at line ${i + 1}: ${line.trim()}`); } } console.log(`\nFinal braceCount: ${braceCount}`); // 更详细地检查每个属性区域 console.log('\n=== Detailed section analysis ===\n'); // 找到各个属性的行号 const sections = []; const sectionNames = ['name', 'components', 'props', 'computed', 'data', 'watch', 'methods']; for (const name of sectionNames) { for (let i = exportStart; i < lines.length; i++) { if (lines[i].match(new RegExp(`^\\s+${name}\\s*:`))) { sections.push({ name, line: i + 1 }); break; } } } // 追踪每个 sections 的括号平衡 for (let s = 0; s < sections.length; s++) { const startLine = sections[s].line - 1; const endLine = s + 1 < sections.length ? sections[s + 1].line - 1 : lines.length; let sectionBraces = 0; for (let i = startLine; i < endLine; i++) { const codeOnly = lines[i].replace(/\/\/.*$/, '').replace(/\/\*.*?\*\//g, ''); const noStrings = codeOnly.replace(/'[^']*'/g, '""').replace(/"[^"]*"/g, '""').replace(/`[^`]*`/g, '""'); sectionBraces += (noStrings.match(/{/g) || []).length; sectionBraces -= (noStrings.match(/}/g) || []).length; } console.log(`${sections[s].name} (lines ${sections[s].line}-${endLine}): brace balance = ${sectionBraces}`); }