Files
zhuangang/topics/frontend/vite/examples/vite-config/vite.config.ts
T

55 lines
2.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 不自动运行:需要先 npm install,然后 npm run dev / npm run build
// Vite 8 配置示例:环境变量、开发代理(含 SSE)、自定义插件(虚拟模块)、拆包。以官方文档为准:https://vite.dev/config/
import { defineConfig, loadEnv, type Plugin } from "vite";
import vue from "@vitejs/plugin-vue";
// 自定义插件:提供虚拟模块 virtual:build-info,在代码中拿到构建时间和版本
function buildInfo(version: string): Plugin {
const id = "virtual:build-info";
const resolved = "\0" + id; // \0 前缀:约定表示虚拟模块,其他插件不要处理
return {
name: "build-info",
resolveId(source) {
return source === id ? resolved : null;
},
load(moduleId) {
if (moduleId !== resolved) return null;
return `export default ${JSON.stringify({ version, builtAt: new Date().toISOString() })};`;
},
};
}
export default defineConfig(({ mode }) => {
// 第三个参数 "" 表示加载全部变量(包括没有 VITE_ 前缀的),只在配置文件里用,不会暴露给浏览器
const env = loadEnv(mode, process.cwd(), "");
const apiTarget = env.API_TARGET ?? "http://127.0.0.1:8000";
return {
plugins: [vue(), buildInfo(env.npm_package_version ?? "dev")],
server: {
port: 5173,
proxy: {
// 普通接口:/api/xxx → 后端 /xxx
"/api": {
target: apiTarget,
changeOrigin: true,
rewrite: (p) => p.replace(/^\/api/, ""),
},
// SSE 流式接口:开发代理默认不会缓冲,但要确保后端返回 text/event-stream 并及时 flush
"/stream": { target: apiTarget, changeOrigin: true },
},
},
build: {
sourcemap: mode !== "production",
rolldownOptions: {
output: {
// Vite 8 基于 Rolldown:拆包用 codeSplitting.groups(Rollup 的 manualChunks 已不推荐)
codeSplitting: {
groups: [{ name: "vendor-vue", test: /node_modules[\\/]@?vue/ }],
},
},
},
},
};
});