import { defineConfig } from 'vite'; import path from 'node:path'; import electron from 'vite-plugin-electron/simple'; import react from '@vitejs/plugin-react'; import renderer from 'vite-plugin-electron-renderer'; import tailwindcss from '@tailwindcss/vite'; import { visualizer } from 'rollup-plugin-visualizer'; const __dirname = import.meta.dirname; // ============================================================ // 热更新说明 // ============================================================ // 修改 src/ → React Fast Refresh(组件级热替换,不丢失状态) // 修改 electron/ → 主进程重建 + Electron 自动重启(预期行为) // 修改 shared/ → 因为 shared/ 被主进程引用,也会触发重启 // 如需避免,可把仅渲染进程用的类型放到 src/types/ // ============================================================ export default defineConfig({ plugins: [ react(), tailwindcss(), electron({ main: { // 主进程入口 entry: 'electron/main.ts', // 只监听 electron/ 目录,避免 shared/ 变更误触重启 // (默认会监听 entry 文件的所有依赖,包括 shared/) }, preload: { input: path.join(__dirname, 'electron/preload.ts'), }, }), renderer(), // 打包体积分析(仅 ANALYZE=true 时生成 stats.html) process.env.ANALYZE && visualizer({ open: true, gzipSize: true, brotliSize: true, filename: 'dist/stats.html', }), ].filter(Boolean), resolve: { alias: { '@': path.resolve(__dirname, 'src'), '@shared': path.resolve(__dirname, 'shared'), }, }, // ============================================================ // 开发服务器 & HMR 配置 // ============================================================ server: { port: 5173, strictPort: true, host: 'localhost', // 文件监听(Windows 优化) watch: { // Windows 上默认的 fs.watch 有时不稳定, // 如果文件保存后界面无反应,可临时开启 usePolling // usePolling: true, // interval: 100, // 忽略不需要监听的目录,减少 CPU 占用 ignored: ['**/node_modules/**', '**/dist/**', '**/dist-electron/**', '**/release/**'], }, // HMR 配置 hmr: { // 在浏览器控制台显示 HMR 覆盖层(错误/警告时) overlay: true, // 协议默认 ws://,localhost 下无需额外配置 }, }, build: { rollupOptions: { output: {}, }, }, preview: { port: 5173, }, });