import { build, context } from 'esbuild'; import { readFileSync } from 'fs'; import { join } from 'path'; const watch = process.argv.includes('--watch'); const common = { bundle: true, sourcemap: false, logLevel: 'info', alias: { 'vue': 'vue/dist/vue.esm-bundler.js' }, }; // 面板进程在 Cocos 的 Electron 渲染层运行,可访问 Node 内建(fs/path),但 vue 必须 // 打进浏览器侧 IIFE。因此面板项用 platform:'browser' + 把 node: 内建标为 external, // 交由运行时解析;这样 esbuild 既不抱怨,又保持 plan 的"运行时读 static 文件"语义。 const entries = [ { entryPoints: ['src/main/index.ts'], outfile: 'dist/main.js', platform: 'node', format: 'cjs', external: [] }, { entryPoints: ['src/panels/default/index.ts'], outfile: 'dist/panels/default.js', platform: 'browser', format: 'iife', external: ['node:fs', 'node:path'] }, ]; if (watch) { for (const e of entries) { const ctx = await context({ ...common, ...e }); await ctx.watch(); } } else { for (const e of entries) await build({ ...common, ...e }); }