import { execSync } from 'child_process'; import fs from 'fs'; import path from 'path'; import react from '@vitejs/plugin-react'; import { defineConfig } from 'vite'; // 构建指纹:版本 + commit hash + 构建时间(设置页「关于」展示,排障救命) const pkg = JSON.parse(fs.readFileSync(path.resolve(__dirname, 'package.json'), 'utf-8')); const gitHash = (() => { try { return execSync('git rev-parse --short HEAD').toString().trim(); } catch { return 'unknown'; } })(); const buildTime = new Date().toISOString(); const APP_VERSION = `${pkg.version}+${gitHash} (${buildTime.slice(0, 16)})`; export default defineConfig({ base: '/', define: { __APP_VERSION__: JSON.stringify(APP_VERSION), }, plugins: [react()], build: { rollupOptions: { output: { manualChunks(id) { if (!id.includes('node_modules')) return; if (id.includes('react') || id.includes('react-router')) return 'vendor-react'; if (id.includes('@codemirror')) return 'vendor-editor'; if (id.includes('@radix-ui')) return 'vendor-ui'; }, }, }, }, server: { port: 5173, strictPort: true, proxy: { '/api': { // 本地联调可用 API_PROXY_TARGET=http://localhost:9001 npm run dev 指向测试实例 target: process.env.API_PROXY_TARGET || 'http://localhost:9000', changeOrigin: true, }, }, }, resolve: { alias: { '@': path.resolve(__dirname, './src'), }, }, });