import path from "path" import { execSync } from "child_process" import react from "@vitejs/plugin-react" import { defineConfig } from "vitest/config" import pkg from "./package.json" with { type: "json" } // 构建指纹:版本来自 package.json,commit 用 git rev-parse 兜底(Settings「关于」展示) function gitCommit(): string { try { return execSync("git rev-parse --short HEAD").toString().trim() } catch { return "unknown" } } // https://vite.dev/config/ export default defineConfig({ test: { environment: 'jsdom', globals: true, setupFiles: ['./src/test/setup.ts'], include: ['src/**/*.test.{ts,tsx}'], }, base: './', plugins: [react()], define: { __APP_VERSION__: JSON.stringify(pkg.version), __COMMIT_HASH__: JSON.stringify(gitCommit()), }, server: { port: 3000, // 端口被占直接报错,不悄悄漂移到其他端口 strictPort: true, proxy: { '/api': { target: 'http://localhost:8080', changeOrigin: true, }, }, }, resolve: { alias: { "@": path.resolve(__dirname, "./src"), }, }, build: { rollupOptions: { output: { // 显式分包:框架与 UI 基础库独立成 chunk,页面懒加载 chunk 更小 manualChunks: { 'react-vendor': ['react', 'react-dom', 'react-router'], 'radix-vendor': [ '@radix-ui/react-dialog', '@radix-ui/react-label', '@radix-ui/react-select', '@radix-ui/react-slot', '@radix-ui/react-switch', '@radix-ui/react-tabs', ], }, }, }, }, })