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