import { resolve } from "path"; import { defineConfig, loadEnv } from "vite"; import electron from "vite-plugin-electron"; import renderer from "vite-plugin-electron-renderer"; import vue from "@vitejs/plugin-vue2"; import vueJsx from "@vitejs/plugin-vue2-jsx"; import { createSvgIconsPlugin } from "vite-plugin-svg-icons"; import compressPlugin from "vite-plugin-compression"; // import { visualizer } from 'rollup-plugin-visualizer'; // compress: 'gzip' | 'brotli' | 'none' function configCompressPlugin(isBuild, compress) { const plugins = []; if (!isBuild) return plugins; const compressList = compress.split(","); if (compressList.includes("gzip")) { plugins.push( compressPlugin({ verbose: true, disable: false, threshold: 10240, algorithm: "gzip", ext: ".gz", }) ); } if (compressList.includes("brotli")) { plugins.push( compressPlugin({ verbose: true, disable: false, threshold: 10240, algorithm: "brotliCompress", ext: ".br", }) ); } return plugins; } function windowsPlugin(isWindows) { return isWindows ? [ electron([ { // Main-Process entry file of the Electron App. entry: "electron/main.js", }, { entry: "electron/preload.js", onstart(options) { // Notify the Renderer-Process to reload the page when the Preload-Scripts build is complete, // instead of restarting the entire Electron App. options.reload(); }, }, ]), renderer(), ] : []; } export default ({ mode }) => { const isBuild = mode === "production"; // mode == production const env = loadEnv(mode, process.cwd()); // dev const isWindows = env.VITE_APP_IsWIndows === "true"; console.log(" env.VITE_APP_IsWIndows", isWindows, env.VITE_APP_IsWIndows); console.log("env", mode, env); const port = env.PORT || 9529; // dev port return defineConfig({ plugins: [ // createVuePlugin(), vue(), vueJsx(), createSvgIconsPlugin({ iconDirs: [resolve(process.cwd(), "src/icons/svg")], symbolId: "icon-[dir]-[name]", }), ...configCompressPlugin(isBuild && !isWindows, 'gzip,brotli'), // visualizer(), ...windowsPlugin(isWindows), ], resolve: { alias: { "@": resolve(__dirname, "./src"), vue: "vue/dist/vue.esm.js", }, }, base: "./", server: { host: '0.0.0.0', port, open: true, headers: { "Cross-Origin-Opener-Policy": "same-origin", "Cross-Origin-Embedder-Policy": "require-corp", }, hmr: { overlay: false }, proxy: { "/api": { target: env.VITE_APP_BASE_URL, changeOrigin: true, ws: true, }, "/cc-admin": { target: env.VITE_APP_BASE_URL, changeOrigin: true, ws: true, }, "/pythonapi": { target: env.VITE_APP_PY_URL, changeOrigin: true, ws: true, rewrite: (path) => path.replace(/^\/pythonapi/, ""), }, "/mxcad": { target: "http://localhost:3001", changeOrigin: true, ws: true, }, "/demo": { target: "http://localhost:3001", changeOrigin: true, ws: true, } }, }, build: { outDir: "dist", assetsDir: "static", // sourcemap: false, // chunkSizeWarningLimit: 1000, rollupOptions: { output: { chunkFileNames: "static/js/[name]-[hash].js", entryFileNames: "static/js/[name]-[hash].js", assetFileNames: "static/[ext]/[name]-[hash].[ext]", // manualChunks(id) { // 静态资源分拆打包 // if (id.includes('node_modules')) { // return id.toString().split('node_modules/')[1].split('/')[0].toString() // } // } }, }, // minify: 'terser', // terserOptions: { // compress: { // drop_console: isBuild, // 打包时删除log // drop_debugger: isBuild, // 打包时删除debugger // pure_funcs: isBuild ? ['console.log'] : [] // }, // output: { // comments: isBuild // 去掉注释 // } // } }, }); };