const fs = require("fs"); const path = require("path"); // 配置需要监听的文件列表:键为 txt 文件路径,值为对应的 js 文件路径 const watchList = { // 监听 item-bottom.txt,同步到 item-bottom.js "../component/item-bottom/item-bottom.txt": "../component/item-bottom/item-bottom.js", // 监听 item-forum.txt,同步到 item-forum.js "../component/item-forum/item-forum.txt": "../component/item-forum/item-forum.js", // 监听 item-head.txt,同步到 item-head.js "../component/item-head/item-head.txt": "../component/item-head/item-head.js", // 监听 item-offer.txt,同步到 item-offer.js "../component/item-offer/item-offer.txt": "../component/item-offer/item-offer.js", // 监听 item-summary.txt,同步到 item-summary.js "../component/item-summary/item-summary.txt": "../component/item-summary/item-summary.js", // 监听 item-vote.txt,同步到 item-vote.js "../component/item-vote/item-vote.txt": "../component/item-vote/item-vote.js", // 监听 item-mj.txt,同步到 item-mj.js "../component/item-mj/item-mj.txt": "../component/item-mj/item-mj.js", // 监听 item-tenement.txt,同步到 item-tenement.js "../component/item-tenement/item-tenement.txt": "../component/item-tenement/item-tenement.js", // 监听 latest-list.txt,同步到 latest-list.js "../component/latest-list/latest-list.txt": "../component/latest-list/latest-list.js", // 监听 slideshow-box.txt,同步到 slideshow-box.js "../component/slideshow-box/slideshow-box.txt": "../component/slideshow-box/slideshow-box.js", // 监听 head-top.txt,同步到 head-top.js "../component/head-top/head-top.txt": "../component/head-top/head-top.js", // 监听 hot-tag.txt,同步到 hot-tag.js "../component/hot-tag/hot-tag.txt": "../component/hot-tag/hot-tag.js", // 监听 hot-search.txt,同步到 hot-search.js "../component/hot-search/hot-search.txt": "../component/hot-search/hot-search.js", // 监听 item-project.txt,同步到 item-project.js "../component/item-project/item-project.txt": "../component/item-project/item-project.js", // 监听 sign-in.txt,同步到 sign-in.js "../component/sign-in/sign-in.txt": "../component/sign-in/sign-in.js", // 监听 head-top-web.txt,同步到 head-top-web.js "../component/head-top-web/head-top-web.txt": "../component/head-top-web/head-top-web.js", // 监听 bi.txt,同步到 bi.js "../component/bi/bi.txt": "../component/bi/bi.js", "../component/huddle-box/huddle-box.txt": "../component/huddle-box/huddle-box.js", "../component/helper-pop/helper-pop.txt": "../component/helper-pop/helper-pop.js", // 可添加更多文件(格式:'txt路径': 'js路径') // './component/other/other.txt': './component/other/other.js', }; // 检查所有文件是否存在 Object.entries(watchList).forEach(([txtPath, jsPath]) => { const resolvedTxt = path.resolve(__dirname, txtPath); const resolvedJs = path.resolve(__dirname, jsPath); if (!fs.existsSync(resolvedTxt)) { console.error(`错误:文件不存在 - ${resolvedTxt}`); process.exit(1); } if (!fs.existsSync(resolvedJs)) { console.error(`错误:文件不存在 - ${resolvedJs}`); process.exit(1); } }); // 同步逻辑:将 txtContent 替换到对应 js 的 template 中 function syncContent(txtPath, jsPath) { try { const txtContent = fs.readFileSync(txtPath, "utf8")?.replace(/[\n\r]/g, ''); let jsContent = fs.readFileSync(jsPath, "utf8"); // 匹配 template: `...` 结构,替换反引号内的内容 const templateRegex = /(template:\s*)(`[^`]*`)/; const innerHTMLRegex = /((?:[A-Za-z_\$][\w\$]*Template|template)\.innerHTML\s*=\s*)(`[^`]*`)/; if (templateRegex.test(jsContent)) { jsContent = jsContent.replace(templateRegex, `$1\`${txtContent}\``); fs.writeFileSync(jsPath, jsContent, "utf8"); console.log(`✅ 同步成功:${path.basename(txtPath)} → ${path.basename(jsPath)} (template格式)`); } else if (innerHTMLRegex.test(jsContent)) { jsContent = jsContent.replace(innerHTMLRegex, `$1\`${txtContent}\``); fs.writeFileSync(jsPath, jsContent, "utf8"); console.log(`✅ 同步成功:${path.basename(txtPath)} → ${path.basename(jsPath)} (innerHTML格式)`); } else { console.error(`❌ 格式错误:${path.basename(jsPath)} 中未找到 template: \`...\` 或 template.innerHTML = \`...\``); } } catch (err) { console.error(`❌ 同步失败:${err.message}`); } } // 为每个文件添加监听 Object.entries(watchList).forEach(([txtPath, jsPath]) => { const resolvedTxt = path.resolve(__dirname, txtPath); const resolvedJs = path.resolve(__dirname, jsPath); fs.watch(resolvedTxt, (eventType) => { if (eventType === "change") { console.log(`\n检测到 ${path.basename(resolvedTxt)} 保存,开始同步...`); syncContent(resolvedTxt, resolvedJs); } }); console.log(`开始监听:${resolvedTxt}`); }); console.log("\n服务启动成功,所有文件修改后将自动同步 🚀");