postbuild 不再合并到 dist/assets(与 Vite 产物冲突且 Windows 下 cpSync 失败),改为完整复制 IDE官网 到 dist/site 并注入 base href;nginx 增加 /site/ 静态路由。 Co-authored-by: Cursor <cursoragent@cursor.com>
67 lines
2.1 KiB
JavaScript
67 lines
2.1 KiB
JavaScript
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('<base ')) return html;
|
|
return html.replace('<head>', '<head>\n <base href="/site/">');
|
|
}
|
|
|
|
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();
|