import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import { minify } from 'html-minifier-terser' // 构建到项目本地 dist/(每次清空,避免旧产物残留), // 再由 `npm run deploy` 用 rsync 同步到 Apache 站点根 /root/html(软链到 /var/www/html)。 // 文件名去掉内容 hash,保持稳定;JS 由 esbuild 压缩,HTML 由下方插件压缩。 // 用 mainPage/ 命名空间子目录避免与 /root/html/js、/root/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: { // 开发服务器把站点根的静态资源代理到 /root/html,方便引用 /448 /449 等 port: 5173, proxy: { '/448': { target: 'http://localhost:8080', changeOrigin: true, }, '/449': { target: 'http://localhost:8080', changeOrigin: true, }, // zTools2 后端同源代理:所有入口(页面/静态/探针/WS/API)统一在 /api/ 下, // 一条 /api 规则即可覆盖 iframe(/api/pdf)与 fetch(/api/pdf/*)。 // ws:true 让 /api/ws/wb/{id} 的 WebSocket 也走此代理。 // 同源相对路径与环境无关:dev 命中本地 zTools2,生产由反代命中当前环境 zTools2。 '/api': { target: 'http://127.0.0.1:6867', changeOrigin: true, ws: true, }, }, }, })