import { defineConfig } from "vite"; import vue from "@vitejs/plugin-vue"; import path from "path"; import { createHtmlPlugin } from "vite-plugin-html"; /** * 构建基线对齐 NoticeFront(云海子应用前端接入规范 v1.12): * Vue3 + TS + view-ui-plus(1.3.24) + Vite;主题/皮肤/图标由 /static 通道下发。 */ export default defineConfig(({ mode }) => { const root = process.cwd(); return { plugins: [ vue(), createHtmlPlugin({ minify: true, pages: [ { entry: "src/main.ts", template: "index.html", filename: "index.html", injectOptions: { data: { title: "学校管理", injectScript: ``, }, }, }, ], }), ], resolve: { alias: { "@": path.resolve(root, "src"), "@public": path.resolve(root, "public"), }, extensions: [".mjs", ".js", ".ts", ".jsx", ".tsx", ".json", ".vue"], }, server: { host: "localhost", port: 8088, open: false, proxy: { // 本地后端:serviceUrl 在 dev 下为空 → /api/* 同源相对,由本代理转发 "/api": { target: process.env.YH_API_PROXY_TARGET || "http://localhost:8101", changeOrigin: true, }, // 主题通道本地联调:默认线上通道,联调本地通道源用 // YH_THEME_PROXY_TARGET=http://localhost:9527 npm run dev "/static": { target: process.env.YH_THEME_PROXY_TARGET || "http://base.yunhaixingtong.com", changeOrigin: true, }, }, }, base: "./", build: { target: "modules", outDir: "dist", assetsDir: "assets", sourcemap: false, minify: "esbuild", chunkSizeWarningLimit: 1500, cssTarget: "chrome61", rollupOptions: { input: { main: path.resolve(root, "index.html"), }, output: { chunkFileNames: "static/js/[name]-[hash].js", entryFileNames: "static/js/[name]-[hash].js", assetFileNames: (assetInfo: any) => { if (assetInfo.type === "asset" && /\.(jpe?g|png|gif|svg)$/i.test(assetInfo.name)) { return "static/img/[name].[hash][ext]"; } if (assetInfo.type === "asset" && /\.(ttf|woff|woff2|eot)$/i.test(assetInfo.name)) { return "static/fonts/[name].[hash][ext]"; } return "static/[ext]/[name]-[hash].[ext]"; }, }, }, }, }; });