const fs = require('fs'); const path = require('path'); const chokidar = require('chokidar'); const { parse } = require('@babel/parser'); const { codeFrameColumns } = require('@babel/code-frame'); // 配置常量 const AUTO_START = '/* auto-generated-start */'; const AUTO_END = '/* auto-generated-end */'; const INDENT = ' '; // 缩进2空格 // 配置文件路径 // const CONFIG_PATH = path.join(__dirname, '../config/dynamic-config.js'); const CONFIG_PATH = "/Users/bmy/source/TsxVueClassApi/src/core/config/configure.config.ts"; const TARGET_PATH = path.join(__dirname, 'templates/TargetClass.ts'); function generateClassMethods(keys) { // 读取目标文件 let targetContent; try { targetContent = fs.readFileSync(TARGET_PATH, 'utf8'); } catch { targetContent = `${AUTO_START}\n${AUTO_END}`; } // 生成新方法代码 const newMethods = keys.map(key => `${INDENT}public ${key}() {\n${INDENT} // Auto-generated\n${INDENT}}` ).join('\n\n'); // 替换标记区域 const newContent = targetContent.replace( new RegExp(`${AUTO_START}([\\s\\S]*?)${AUTO_END}`), `${AUTO_START}\n${newMethods}\n${INDENT}${AUTO_END}` ); // 格式校验 try { parse(newContent, { plugins: ['typescript'] }); fs.writeFileSync(TARGET_PATH, newContent); } catch (err) { console.error('⚠️ 生成代码语法错误:'); console.log(codeFrameColumns(newContent, err.loc, { highlightCode: true })); } }