mirror of
https://gitee.com/py2cn/pyminer.git
synced 2025-12-06 11:49:11 +08:00
89 lines
2.5 KiB
TypeScript
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'),
|
|
}
|
|
}
|
|
}) |