import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import { minify } from 'html-minifier-terser' // 构建到项目本地 dist/(每次清空,避免旧产物残留), // 再由 `npm run deploy` 或 `deploy.sh` 用 rsync 同步到 Apache 站点根 /var/www/html。 // 文件名去掉内容 hash,保持稳定;JS 由 esbuild 压缩,HTML 由下方插件压缩。 // 用 mainPage/ 命名空间子目录避免与 /var/www/html/js、/var/www/html/css 既有旧文件冲突。 function minifyHtml() { return { name: 'minify-html', apply: 'build', transformIndexHtml: { order: 'post', handler(html) { return minify(html, { collapseWhitespace: true, removeComments: true, removeRedundantAttributes: true, removeScriptTypeAttributes: true, removeStyleLinkTypeAttributes: true, collapseBooleanAttributes: true, minifyCSS: true, minifyJS: true, }) }, }, } } export default defineConfig({ plugins: [vue(), minifyHtml()], base: '/', build: { outDir: 'dist', // ★ dist 在项目内,安全清空,杜绝旧 hash 文件堆积 emptyOutDir: true, rollupOptions: { output: { // 稳定文件名:去掉 [hash],便于部署与长效缓存策略 entryFileNames: 'js/mainPage/[name].js', chunkFileNames: 'js/mainPage/[name].js', assetFileNames: (assetInfo) => { const name = assetInfo.name || '' if (name.endsWith('.css')) { return 'css/mainPage/[name][extname]' } return 'assets/mainPage/[name][extname]' }, }, }, }, server: { port: 5173, proxy: { // zTools2 后端同源代理:所有入口(API/静态/探针/WS)统一在 /api/ 下,一条规则即可。 // ws:true 让 /api/ws/wb/{id} 的 WebSocket 也走此代理。 // 同源相对路径与环境无关:dev 命中本地 zTools2,生产由反代命中当前环境 zTools2。 '/api': { target: 'http://127.0.0.1:6867', changeOrigin: true, ws: true, }, }, }, })