import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import vueJsx from "@vitejs/plugin-vue-jsx";
import legacy from "@vitejs/plugin-legacy";
import { resolve } from "path";
import postCssPxToRem from "postcss-pxtorem";
import { visualizer } from "rollup-plugin-visualizer";
import viteCompression from "vite-plugin-compression";

// https://vitejs.dev/config/
export default defineConfig({
  base: "./",
  resolve: {},
  // assetsInclude: ['**/*.html'],
  plugins: [
    // mkcert(), // 本地https
    // viteCompression({
    //   algorithm: "gzip", // 指定压缩算法为gzip,[ 'gzip' , 'brotliCompress' ,'deflate' , 'deflateRaw']
    //   ext: ".gz", // 指定压缩后的文件扩展名为.gz
    //   threshold: 10240, // 仅对文件大小大于threshold的文件进行压缩,默认为10KB
    //   deleteOriginFile: false, // 是否删除原始文件,默认为false
    //   filter: /\.(js|css|json|html|ico|svg)(\?.*)?$/i, // 匹配要压缩的文件的正则表达式,默认为匹配.js、.css、.json、.html、.ico和.svg文件
    //   compressionOptions: { level: 9 }, // 指定gzip压缩级别,默认为9(最高级别)
    //   verbose: true, //是否在控制台输出压缩结果
    //   disable: false, //是否禁用插件
    // }),
    legacy({
      targets: ["Chrome 63"],
      additionalLegacyPolyfills: ["regenerator-runtime/runtime"],
      modernPolyfills: true,
    }),
    vue(),
    vueJsx(),
    visualizer({ open: true }), // 自动开启分析页面
  ],
  css: {
    postcss: {
      plugins: [
        postCssPxToRem({
          rootValue: 37.5,
          propList: ["*"],
          selectorBlackList: [".norem"],
        }),
      ],
    },
  },
  build: {
    minify: 'terser', // 启用 terser 压缩  
    terserOptions: {  
        compress: {  
            // pure_funcs: ['console.log'], // 只删除 console.log 
            //drop_console: true, // 删除所有 console
            drop_debugger: true, // 删除 debugger  
        }  
    },
    rollupOptions: {
      input: {
        instrument: resolve(__dirname, "instrument.html"),
      },
      output: {
        // 最小化拆分包
        manualChunks(id) {
          if (id.includes("osmd-extended")) {
            // 通过拆分包的方式将所有来自osmd-extended的模块打包到单独的chunk中
            return id
              .toString()
              .split("osmd-extended/")[1]
              .split("/")[0]
              .toString();
          }
        },
        chunkFileNames: "js/[name]-[hash].js", // 引入文件名的名称
        entryFileNames: "js/[name]-[hash].js", // 包的入口文件名称
        assetFileNames: "[ext]/[name]-[hash].[ext]", // 资源文件像 字体,图片等
      },
    },
  },
  server: {
    cors: true,
    port: 3000,
    // https: true,
    proxy: {
      "^/instrument/.*": {
        target: "https://test.gym.lexiaoya.cn",
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/instrument/, ""),
      },
    },
  },
  preview: {
    port: 3000,
    host: "192.168.3.114",
  },
});
// vite.config.js