import fs from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); const dist = path.join(root, 'dist'); const siteSrc = path.join(root, 'IDE官网'); const legacyLoginDir = path.join(dist, 'login'); const siteDir = path.join(dist, 'site'); /** Avoid fs.cpSync merge into dist/assets (conflicts with Vite + can crash on Windows). */ function copyDirSync(src, dest, options = {}) { const { skipDirNames = new Set() } = options; fs.mkdirSync(dest, { recursive: true }); for (const entry of fs.readdirSync(src, { withFileTypes: true })) { if (entry.isDirectory() && skipDirNames.has(entry.name)) continue; const srcPath = path.join(src, entry.name); const destPath = path.join(dest, entry.name); if (entry.isDirectory()) { copyDirSync(srcPath, destPath, options); continue; } if (entry.isFile()) { fs.copyFileSync(srcPath, destPath); } } } function injectSiteBaseHref(html) { if (html.includes('', '\n '); } if (fs.existsSync(legacyLoginDir)) { fs.rmSync(legacyLoginDir, { recursive: true, force: true }); console.log('[postbuild] removed dist/login (conflicts with SPA route /login)'); } function copyOfficialSite() { if (!fs.existsSync(siteSrc) || !fs.existsSync(dist)) { return; } if (fs.existsSync(siteDir)) { fs.rmSync(siteDir, { recursive: true, force: true }); } copyDirSync(siteSrc, siteDir, { skipDirNames: new Set(['.well-known']), }); const siteIndex = path.join(siteDir, 'index.html'); if (fs.existsSync(siteIndex)) { const html = fs.readFileSync(siteIndex, 'utf8'); fs.writeFileSync(siteIndex, injectSiteBaseHref(html), 'utf8'); } const src9610 = path.join(siteSrc, '9610.html'); if (fs.existsSync(src9610)) { fs.copyFileSync(src9610, path.join(dist, '9610.html')); } console.log('[postbuild] copied official site to dist/site (assets under /site/assets)'); } copyOfficialSite();