diff --git a/frontend/scripts/copy-monaco.mjs b/frontend/scripts/copy-monaco.mjs new file mode 100644 index 0000000..77f9749 --- /dev/null +++ b/frontend/scripts/copy-monaco.mjs @@ -0,0 +1,40 @@ +// 把 monaco-editor 自带的预构建 min/vs 复制到 public/monaco/vs, +// 让 @monaco-editor/react 的 loader 在离线环境下从同源 /monaco/vs 加载, +// 不再依赖 jsDelivr CDN。postinstall 时跑一次即可,产物不进 git(被 .gitignore +// 忽略),由 pnpm install 重新生成。 + +import { cp, mkdir, rm, stat } from "node:fs/promises"; +import { dirname, join, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; + +const here = dirname(fileURLToPath(import.meta.url)); +const frontendRoot = resolve(here, ".."); + +const src = resolve( + frontendRoot, + "node_modules/monaco-editor/min/vs", +); +const dest = resolve(frontendRoot, "public/monaco/vs"); + +async function exists(p) { + try { + await stat(p); + return true; + } catch { + return false; + } +} + +if (!(await exists(src))) { + console.error( + `[copy-monaco] 源目录不存在: ${src}\n` + + `请确认 frontend/package.json 已声明 monaco-editor 依赖并已 pnpm install。`, + ); + process.exit(1); +} + +await mkdir(dirname(dest), { recursive: true }); +await rm(dest, { recursive: true, force: true }); +await cp(src, dest, { recursive: true }); + +console.log(`[copy-monaco] ${src} -> ${dest}`);