You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

57 lines
2.0 KiB
TypeScript

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]',
},
},
},
};
});