import { defineConfig, loadEnv } from 'vite'; import { createHtmlPlugin } from 'vite-plugin-html'; import vue from '@vitejs/plugin-vue'; import vueJsx from '@vitejs/plugin-vue-jsx'; import dotenv from 'dotenv'; export default defineConfig(({ mode }): any => { // 加载当前模式的环境变量 const env = loadEnv(mode, process.cwd()); // 加载项目自身设置的环境变量 const project = process.env.PROJECT; const envFile = `${process.cwd()}/env/.env.${mode}.${project}`; // 借助 dotenv 库加载项目环境变量 const customEnv: any = dotenv.config({ path: envFile }); console.log('customEnv', customEnv); return { define: { // 将项目自身环境变量加入到 Vite 的全局定义中 // 注意:这里的项目环境变量值需要用 JSON.stringify 转为字符串,否则会报错 ...Object.fromEntries(Object.entries(customEnv.parsed).map(([key, value]) => [key, JSON.stringify(value)])), }, server: { port: env.VITE_PORT, }, plugins: [ vue(), vueJsx(), createHtmlPlugin({ minify: true, entry: `/src/main.ts`, template: `index.html`, }), ], resolve: { alias: { '@': `${process.cwd()}/src`, // 动态设置项目内部别名 '@projectA': `${process.cwd()}/src/apps/projectA`, '@projectB': `${process.cwd()}/src/apps/projectB`, }, }, build: { outDir: `${process.cwd()}/dist/${project}`, rollupOptions: { // 静态资源分类打包 output: { chunkFileNames: 'static/js/[name]-[hash].js', entryFileNames: 'static/js/[name]-[hash].js', assetFileNames: 'static/[ext]/[name]-[hash].[ext]', }, }, }, }; });