import { resolve } from 'node:path' import { defineConfig, externalizeDepsPlugin } from 'electron-vite' import react from '@vitejs/plugin-react' const root = process.cwd() /** * electron 位于 devDependencies,externalizeDepsPlugin 只处理 dependencies, * 因此必须显式 external,否则 electron 的 Node 入口会被内联进主进程产物。 */ // node-pty resolves its shipped native/prebuild resources relative to its own package. // Preserve that package boundary instead of moving its loader into out/main. const builtinsExternal = ['electron', 'node-pty'] export default defineConfig({ main: { plugins: [externalizeDepsPlugin()], build: { rollupOptions: { input: resolve(root, 'src/main/index.ts'), external: builtinsExternal } }, resolve: { alias: { '@shared': resolve(root, 'src/shared') } } }, preload: { plugins: [externalizeDepsPlugin()], build: { rollupOptions: { input: resolve(root, 'src/preload/index.ts'), external: builtinsExternal, // sandbox: true 的 preload 必须是 CommonJS,ESM preload 只能配 sandbox: false output: { format: 'cjs', entryFileNames: 'index.cjs' } } }, resolve: { alias: { '@shared': resolve(root, 'src/shared') } } }, renderer: { root: resolve(root, 'src/renderer'), plugins: [react()], resolve: { alias: { '@renderer': resolve(root, 'src/renderer/src'), '@shared': resolve(root, 'src/shared') } }, build: { rollupOptions: { input: { index: resolve(root, 'src/renderer/index.html'), settings: resolve(root, 'src/renderer/settings.html') } } } } })