import { fileURLToPath, URL } from 'node:url'

import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

// https://vite.dev/config/
export default defineConfig(({ command, mode }) => {
  const env = loadEnv(mode, process.cwd(), '')
  return {
    /* 共享 */
    // 根目录
    // root:''
    // 基础
    // base:'',
    base: `/${env.VITE_BASE_URL}`,
    // 模式 development,production
    // mode:'',
    // 定义全局常量
    // define:{},
    // 插件
    plugins: [
      vue(),
      AutoImport({
        resolvers: [ElementPlusResolver()],
      }),
      Components({
        resolvers: [ElementPlusResolver()],
      }),
    ],
    // 普通静态资产,此目录中的文件在dev期间提供,并在build中复制到根目录,并且时钟按原样提供或复制,不进行转换  string,false
    // publicDir: false,
    //保存缓存文件,
    // cacheDir: '',
    /* 服务器 */
    server: {
      // 服务器主机,侦听ip地址
      host: '0.0.0.0',
      // 服务器端口
      port: 8001,
      // 端口已在使用中,設置為exit,不尝试下一个可用端口
      // strictPort:false,
      // 启用安全证书,@vitejs/plugin-basic-ssl ,可以自己创建并缓存签名证书,可以创建自己的证书
      // https:{},
      // 在服务器启动时自动在浏览器中打开应用程序。当值为字符串时,它将用作 URL 的路径名。如果你想在你喜欢的特定浏览器中打开服务器
      // open:''
      // 服务器
      proxy: {
        [env.VITE_REQUEST_BASE]: {
          target: 'http://127.0.0.1:9000',
          ws: false,
          changeOrigin: true,
          // rewrite: (path) => path.replace(new RegExp(`^/api`), ''),
        },
      },
      // 为开发服务器配置 CORS。默认情况下,此选项处于启用状态,并允许任何源。
      // cors:false,
      // 指定服务器响应标头
      // headers:'',
    },
    /* 构建选项 */
    build: {
      outDir: 'shuitou'
      //env.VITE_BASE_URL
      // 最终捆绑包的浏览器兼容性目标。默认值是 Vite 特殊值
      // target:'',
      // 预加载
      // module:'',
      // 是否自动注入模块预加载polyfill
      // polyfillModule:false,
      // 指定输出目录
      // outDir:'',
      // 指定要将生产厂的资产签到在
      // assets: '',
      // 小于此阈值的导入或引用的资源将被内联为 base64 URL,以避免额外的 http 请求。设置为 可完全禁用内联。
      // assetsInlineLimit:0,
      // 启用/禁用 CSS 代码拆分。启用后,在异步 JS 块中导入的 CSS 将保留为块,并在提取块时一起提取。
      // cssCodeSplit:false,
      // 此选项允许用户为 CSS 缩小设置与用于 JavaScript 转译的目标不同的浏览器目标
      // cssTarget:'',
      // 此选项允许用户专门覆盖 CSS 缩小,而不是默认为 ,因此您可以分别为 JS 和 CSS 配置缩小
      // cssMinify:false,
      // 生成生产源映射。如果 ,将创建一个单独的 sourcemap 文件。如果 ,则 sourcemap 将作为数据 URI 附加到生成的输出文件中。 除了捆绑文件中相应的 SourceMap 注释被禁止显示之外,其工作方式与此类似
      // source:false,
      // 直接自定义底层 Rollup bundle。这与可以从 Rollup 配置文件导出的选项相同,并且将与 Vite 的内部 Rollup 选项合并
      // rollup:{},
    },
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url)),
      },
    },
  }
})