Files
pyminer/vite.config.ts
lixianglong 6edd51111f 修改pymienr 为electron框架
Signed-off-by: lixianglong <lixianglong@pyminer.com>
2025-12-03 21:55:03 +08:00

89 lines
2.5 KiB
TypeScript

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import { resolve } from 'path'
import { copyFileSync, mkdirSync, existsSync } from 'fs'
// 自定义插件:复制 PDF.js worker 文件到输出目录
const copyPdfWorkerPlugin = () => {
let outDir = 'dist';
return {
name: 'copy-pdf-worker',
configResolved(config: any) {
outDir = config.build.outDir;
},
writeBundle() {
// 在构建完成后,从 public 复制 worker 文件到输出目录
const distDir = resolve(__dirname, outDir);
const sourceWorker = resolve(__dirname, 'public/pdf.worker.mjs');
if (!existsSync(sourceWorker)) {
console.warn('[Vite Plugin] pdf.worker.mjs 不存在于 public 目录');
return;
}
try {
mkdirSync(distDir, { recursive: true });
copyFileSync(sourceWorker, resolve(distDir, 'pdf.worker.mjs'));
console.log('[Vite Plugin] PDF.js worker 已从 public 复制到构建输出目录');
} catch (error) {
console.warn('[Vite Plugin] 复制 PDF.js worker 到构建目录失败:', error);
}
}
};
};
// https://vite.dev/config/
export default defineConfig({
plugins: [react(), copyPdfWorkerPlugin()],
base: './', // 确保资源路径相对,适配 Electron
server: {
port: 5173, // 恢复为 Vite 默认端口
},
build: {
outDir: 'dist', // 输出目录
// 优化构建性能
minify: 'esbuild',
// 代码分割优化
rollupOptions: {
// 排除 download-logos.js 文件
external: ['fs', 'path', 'https', 'http', 'url'],
output: {
format: 'es',
manualChunks: {
// 将大型依赖拆分到单独的 chunk
'react-vendor': ['react', 'react-dom'],
'antd-vendor': ['antd', '@ant-design/icons'],
'mui-vendor': ['@mui/material', '@mui/icons-material'],
'dnd-vendor': ['@dnd-kit/core', '@dnd-kit/sortable', '@dnd-kit/utilities'],
}
}
},
// 设置 chunk 大小警告限制
chunkSizeWarningLimit: 1000,
},
// 优化依赖预构建
optimizeDeps: {
include: [
'react',
'react-dom',
'antd',
'@ant-design/icons',
'@mui/material',
'@mui/icons-material',
'@dnd-kit/core',
'@dnd-kit/sortable',
'monaco-editor'
]
},
// 配置 worker
worker: {
format: 'es'
},
// 配置资源路径别名
resolve: {
alias: {
'@': resolve(__dirname, 'src'),
'@assets': resolve(__dirname, 'src/assets'),
}
}
})