65 lines
1.9 KiB
JavaScript
65 lines
1.9 KiB
JavaScript
#!/usr/bin/env node
|
||
/**
|
||
* 将 monaco-editor 的静态资源(min/vs)复制到 public/ 下,确保 Electron 打包后可离线加载。
|
||
*
|
||
* 目标产物:
|
||
* public/monaco/vs/**
|
||
*
|
||
* 运行时:
|
||
* 渲染进程通过 @monaco-editor/react 的 loader.config({ paths: { vs: "./monaco/vs" } })
|
||
* 指向该目录。
|
||
*/
|
||
/* eslint-disable no-console */
|
||
'use strict';
|
||
|
||
const path = require('path');
|
||
const fs = require('fs');
|
||
const { getProjectRoot } = require('../utils/project-paths');
|
||
|
||
const projectRoot = getProjectRoot();
|
||
const srcVsDir = path.join(projectRoot, 'node_modules', 'monaco-editor', 'min', 'vs');
|
||
const destVsDir = path.join(projectRoot, 'public', 'monaco', 'vs');
|
||
|
||
function copyDirRecursive(src, dest) {
|
||
if (!fs.existsSync(src)) return;
|
||
fs.mkdirSync(dest, { recursive: true });
|
||
for (const name of fs.readdirSync(src)) {
|
||
const s = path.join(src, name);
|
||
const d = path.join(dest, name);
|
||
const stat = fs.statSync(s);
|
||
if (stat.isDirectory()) {
|
||
copyDirRecursive(s, d);
|
||
} else {
|
||
fs.copyFileSync(s, d);
|
||
}
|
||
}
|
||
}
|
||
|
||
function main() {
|
||
if (!fs.existsSync(srcVsDir)) {
|
||
console.error('[prepare-monaco] 未找到 monaco-editor 资源目录:');
|
||
console.error(` ${srcVsDir}`);
|
||
console.error('[prepare-monaco] 请先执行 npm install');
|
||
process.exit(1);
|
||
}
|
||
|
||
// 清理旧产物,避免残留导致加载异常
|
||
if (fs.existsSync(destVsDir)) {
|
||
fs.rmSync(destVsDir, { recursive: true, force: true });
|
||
}
|
||
|
||
console.log('[prepare-monaco] 复制 monaco 静态资源...');
|
||
copyDirRecursive(srcVsDir, destVsDir);
|
||
|
||
// 基本校验:loader 需要 loader.js
|
||
const loaderJs = path.join(destVsDir, 'loader.js');
|
||
if (!fs.existsSync(loaderJs)) {
|
||
console.warn('[prepare-monaco] ⚠️ 缺少 vs/loader.js,monaco 可能无法加载');
|
||
}
|
||
|
||
console.log('[prepare-monaco] ✓ public/monaco/vs 已准备完成');
|
||
}
|
||
|
||
main();
|
||
|