#!/usr/bin/env python3 # -*- coding: utf-8 -*- import json import re def escape_for_js(text): """完全转义文本以适合在JavaScript字符串中使用""" # 首先转义反斜杠 text = text.replace('\\', '\\\\') # 转义双引号 text = text.replace('"', '\\"') # 转义换行符 text = text.replace('\n', '\\n') # 转义回车符 text = text.replace('\r', '\\r') # 转义制表符 text = text.replace('\t', '\\t') return text def main(): # 读取完整的项目数据 with open('complete_project_data.json', 'r', encoding='utf-8') as f: complete_data = json.load(f) # 读取当前的mock文件 with open('src/mocks/projectLibraryMock.js', 'r', encoding='utf-8') as f: lines = f.readlines() # 处理每一行 new_lines = [] i = 0 while i < len(lines): line = lines[i] # 检查是否是项目ID行 if '"id":' in line: # 提取ID id_match = re.search(r'"id":\s*(\d+)', line) if id_match: project_id = int(id_match.group(1)) # 查找对应的完整数据 complete_project = next((p for p in complete_data if p['id'] == project_id), None) if complete_project: # 添加当前行 new_lines.append(line) i += 1 # 处理后续的行,查找并替换overview, process, keyPoints replaced = {'overview': False, 'process': False, 'keyPoints': False} while i < len(lines) and not all(replaced.values()): current_line = lines[i] if '"overview":' in current_line and not replaced['overview']: # 替换overview行 overview = escape_for_js(complete_project['overview']) indent = ' ' new_lines.append(f'{indent}"overview": "{overview}",\n') replaced['overview'] = True i += 1 elif '"process":' in current_line and not replaced['process']: # 替换process行 process = escape_for_js(complete_project['process']) indent = ' ' new_lines.append(f'{indent}"process": "{process}",\n') replaced['process'] = True i += 1 elif '"keyPoints":' in current_line and not replaced['keyPoints']: # 替换keyPoints行 keypoints = escape_for_js(complete_project['keypoints']) indent = ' ' # 检查是否是最后一个字段 if current_line.rstrip().endswith('"'): new_lines.append(f'{indent}"keyPoints": "{keypoints}"\n') else: new_lines.append(f'{indent}"keyPoints": "{keypoints}",\n') replaced['keyPoints'] = True i += 1 else: new_lines.append(current_line) i += 1 else: new_lines.append(line) i += 1 else: new_lines.append(line) i += 1 else: new_lines.append(line) i += 1 # 保存更新后的文件 with open('src/mocks/projectLibraryMock.js', 'w', encoding='utf-8') as f: f.writelines(new_lines) print("✅ 项目详情已完整更新") # 验证JavaScript语法 import subprocess result = subprocess.run(['node', '-c', 'src/mocks/projectLibraryMock.js'], capture_output=True, text=True) if result.returncode == 0: print("✅ JavaScript语法检查通过") else: print(f"❌ JavaScript语法错误:\n{result.stderr}") # 显示错误位置附近的内容 error_match = re.search(r':(\d+):', result.stderr) if error_match: error_line = int(error_match.group(1)) print(f"\n错误位置附近的内容(行 {error_line-2} 到 {error_line+2}):") with open('src/mocks/projectLibraryMock.js', 'r', encoding='utf-8') as f: all_lines = f.readlines() for line_num in range(max(0, error_line-3), min(len(all_lines), error_line+2)): print(f"{line_num+1:4}: {all_lines[line_num].rstrip()}") if __name__ == "__main__": main()