import type { UserConfig } from 'vite' import { resolve } from 'node:path' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' import Unocss from 'unocss/vite' import AutoImport from 'unplugin-auto-import/vite' import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' import Components from 'unplugin-vue-components/vite' export function createSharedViteConfig(rootDir: string, envs: Record = {}): Partial { const plugins = [ vue(), vueJsx(), Unocss(), AutoImport({ resolvers: [ElementPlusResolver()], dts: resolve(rootDir, 'src/auto-imports.d.ts'), }), Components({ resolvers: [ElementPlusResolver()], dts: resolve(rootDir, 'src/components.d.ts'), }), ] as unknown as UserConfig['plugins'] return { // 统一从 packages/core 读取环境变量 envDir: __dirname, plugins, resolve: { alias: { '@': resolve(rootDir, 'src'), '@cslab-dcs/core': resolve(__dirname, './src'), }, }, css: { preprocessorOptions: { scss: { // 自定义 element-plus 主题或全局变量 additionalData: `@use "@/assets/styles/variables.scss" as *;`, api: 'modern-compiler', // sass-loader v15+ requirement }, }, }, build: { rollupOptions: { output: { manualChunks: { 'vue-vendor': ['vue', 'vue-router', 'pinia', '@vueuse/core'], 'element-plus': ['element-plus'], 'general-utils': ['dayjs', 'zod', 'mitt', 'ofetch'], }, }, }, }, server: { proxy: { '/cslab-server': { target: envs.VITE_API_BASE_URL, changeOrigin: true, }, '/chemical-chaos': { target: envs.VITE_WS_DOMAIN, changeOrigin: true, ws: true, }, }, }, } }