vite配置文件

94 阅读1分钟

导读:vite配置文件的编写,包含部分plugin插件应用、@配置、proxy本地代理

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

import { defineConfig, loadEnv, UserConfig, ConfigEnv } from 'vite';

import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'

import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
// https://vitejs.dev/config/
export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
  const env = loadEnv(mode, process.cwd());
  // 判断运行环境,通过文件配置属性VITE_BASE_URL
  const appMode = env.VITE_APP_MODE;
  const api = env.VITE_BASE_URL; 
  return {
    plugins: [
      vue(),
      vueJsx(),
      AutoImport({
        resolvers: [ElementPlusResolver()],
      }),
      Components({
        resolvers: [
          // 1、配置ElementPlus采用sass样式配色系统
          ElementPlusResolver({ importStyle: 'sass' }),
        ],
      }),
    ],
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url))
      }
    },
    css: {
      preprocessorOptions: {
        scss: {
          // 2、自动导入定制化样式文件进行样式覆盖
          additionalData: `
        @use "@/styles/element/index.scss" as *;
        @use "@/styles/var.scss" as *;
        `,
        },
      },
    },
    // !! 这个地址跟服务器上访问的 url紧密相关。类似vue2那个publicPath
    // 静态资源基础路径 base :'./' || '',
    // 例如:base :'/h5' ,// 子目录h5下,一般跟打包后的文件夹名字一致,指的是项目根目录和主域名之间的路径
    base: appMode == 'production' ? './' : '/',
    // 打包配置
    build: {
      outDir: 'vite-vue-ts',
      rollupOptions: {
        output: {
          //js和css文件夹分离
          chunkFileNames: 'static/js/[name]-[hash].js', // 入口文件名
          entryFileNames: 'static/js/[name]-[hash].js', // 块文件名
          assetFileNames: 'static/[ext]/[name]-[hash].[ext]', // 资源文件名 css 图片等等
          manualChunks: {
            vue: ['vue', 'pinia', 'vue-router'],
          },
        },
      },
    },
    // 配置代理,解决本地开发跨域问题
    server: {
      host: '0.0.0.0',
      port: 8083,
      open: true, // 运行是否自动打开浏览器
      proxy: {
        [api]: {
          target: env.VITE_BASE_API,
          changeOrigin: true,
          rewrite: (path) => path.replace(new RegExp('^' + api), ''),
        },
      },
    },
  };
});