| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- import { defineConfig, loadEnv } from 'vite';
- import react from '@vitejs/plugin-react';
- import { visualizer } from 'rollup-plugin-visualizer';
- import federation from '@originjs/vite-plugin-federation';
- // https://vite.dev/config/
- export default defineConfig(({ mode }) => {
- const env = loadEnv(mode, process.cwd(), '');
- const apiTarget = env.VITE_API_BASE_URL || 'http://localhost:8000';
- const modChatApiTarget = env.VITE_MOD_CHAT_API_BASE_URL || apiTarget;
- return {
- plugins: [
- react(),
- federation({
- name: 'ax_frontend_app',
- remotes: {
- mod_chat: env.VITE_MOD_CHAT_REMOTE_URL || 'http://localhost:5172/assets/remoteEntry.js',
- },
- shared: {
- react: { requiredVersion: false },
- 'react-dom': { requiredVersion: false },
- 'react/jsx-runtime': {
- packagePath: './src/react-jsx-runtime.ts',
- requiredVersion: false,
- },
- 'react/jsx-dev-runtime': {
- packagePath: './src/react-jsx-dev-runtime.ts',
- requiredVersion: false,
- },
- },
- }),
-
- // Bundle 分析工具(通过 ANALYZE=true 环境变量启用)
- process.env.ANALYZE === 'true' && visualizer({
- open: false,
- filename: 'dist/stats.html',
- gzipSize: true,
- brotliSize: true,
- template: 'treemap',
- }),
- ].filter(Boolean),
- build: {
- // Keep production output minified for Lighthouse and real deployments.
- minify: 'oxc',
- cssMinify: 'lightningcss',
- sourcemap: false,
- reportCompressedSize: true,
- // Large optional libraries are split by dynamic imports.
- chunkSizeWarningLimit: 600,
- rollupOptions: {
- output: {
- // Do not eagerly preload every dependency of the application entry.
- // Dynamic panels and export libraries should be fetched only when used.
- hoistTransitiveImports: false,
- manualChunks(id: string) {
- if (/node_modules[\\/](?:react|react-dom)[\\/]/.test(id)) {
- return 'react-vendor';
- }
- if (/node_modules[\\/](?:axios|zustand|uuid)[\\/]/.test(id)) {
- return 'utils-vendor';
- }
- },
- },
- },
- // 启用 CSS 代码分割
- cssCodeSplit: true,
- // 小于此阈值的资源将内联为 base64
- assetsInlineLimit: 4096, // 4KB
- },
- // 开发服务器配置
- server: {
- port: 5173,
- host: true,
- strictPort: true,
- open: false,
- proxy: {
- '/api': {
- target: apiTarget,
- changeOrigin: true,
- },
- '/composer': {
- target: modChatApiTarget,
- changeOrigin: true,
- },
- '/registry': {
- target: env.VITE_MOD_CHAT_REGISTRY_API_BASE_URL || modChatApiTarget,
- changeOrigin: true,
- },
- '/agents': {
- target: modChatApiTarget,
- changeOrigin: true,
- },
- '/models': {
- target: modChatApiTarget,
- changeOrigin: true,
- },
- '/tools': {
- target: modChatApiTarget,
- changeOrigin: true,
- },
- '/sessions': {
- target: modChatApiTarget,
- changeOrigin: true,
- },
- },
- },
- preview: {
- port: 4173,
- host: true,
- strictPort: true,
- proxy: {
- '/api': {
- target: apiTarget,
- changeOrigin: true,
- },
- '/composer': {
- target: modChatApiTarget,
- changeOrigin: true,
- },
- '/registry': {
- target: env.VITE_MOD_CHAT_REGISTRY_API_BASE_URL || modChatApiTarget,
- changeOrigin: true,
- },
- '/agents': {
- target: modChatApiTarget,
- changeOrigin: true,
- },
- '/models': {
- target: modChatApiTarget,
- changeOrigin: true,
- },
- '/tools': {
- target: modChatApiTarget,
- changeOrigin: true,
- },
- '/sessions': {
- target: modChatApiTarget,
- changeOrigin: true,
- },
- },
- },
- // 依赖预构建优化
- optimizeDeps: {
- include: [
- 'react',
- 'react-dom',
- 'axios',
- 'zustand',
- 'antd',
- '@ant-design/icons',
- ],
- // 排除不需要预构建的大型依赖
- exclude: [
- 'mammoth',
- ],
- },
- };
- });
|