自用 vite 配置文件

vite 配置文件, 包含了常用的各种插件以及配置项说明。

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'

// import compressPlugin from "vite-plugin-compression"; //静态资源压缩
// import legacyPlugin from "@vitejs/plugin-legacy"; //浏览器兼容

// 自动引入 api
// import AutoImport from 'unplugin-auto-import/vite'

// 移动端vw适配配置
// import postcsspxtoviewport from 'postcss-px-to-viewport' //插件

// 打包体积分析 npm i rollup-plugin-visualizer -D
import { visualizer } from 'rollup-plugin-visualizer'

// 打包 CDN 引入 external 排除
import externalGlobals from 'rollup-plugin-external-globals'

// 参考 https://vitejs.dev/config/

// 使用函数配置形式 更加灵活
export default defineConfig(({ command, mode, ssrBuild }) => {
  // common 公共配置
  const commonConfig = {
    // 自定义 .env 文件的前缀 可以是 string[] (默认 'VITE_')
    envPrefix: ['VITE_', 'VUE_', 'BASE_'],
    resolve: {
      alias: {
        '@': path.resolve(__dirname, 'src'),
        '@pub': path.resolve(__dirname, 'public'),
        // 'vue': 'vue/dist/vue.esm-bundler.js',
      },
    },
    plugins: [
      vue(),
      // 打包体积分析
      visualizer({ open: true }),

      // AutoImport({
      //   // 指定 vue 自动化导入 api (无需 import)
      //   imports: ['vue'],
      //   // 创建声明文件的目录(否则生成在根目录下)
      //   dts: 'src/auto-import.d.ts',
      // }),

      // // gzip静态资源压缩
      // compressPlugin({
      //   verbose: true, // 默认即可
      //   disable: false, //开启压缩(不禁用),默认即可
      //   deleteOriginFile: false, //删除源文件
      //   threshold: 10240, //压缩前最小文件大小
      //   algorithm: "gzip", //压缩算法
      //   ext: ".gz", //文件类型
      // }),

      // // 兼容插件
      // legacyPlugin({
      //   targets: ["chrome 52"], // 需要兼容的目标列表,可以设置多个
      //   additionalLegacyPolyfills: ["regenerator-runtime/runtime"], // 面向IE11时需要此插件
      // }),
    ],
  }

  if (command === 'serve') {
    return {
      ...commonConfig,
      server: {
        port: 8080, //vite项目启动时自定义端口
        open: true, //vite项目启动时自动打开浏览器
        hmr: true, //开启热更新
      },
      css: {
        // vite 自带 postcss 配置项
        // postcss: {
        //   plugins: [
        //     postcsspxtoviewport({
        //       unitToConvert: 'px', // 要转化的单位
        //       viewportWidth: 750, // UI设计稿的宽度
        //       unitPrecision: 4, // 转换后的精度,即小数点位数
        //     }),
        //   ],
        // },
        // 预处理器配置
        preprocessorOptions: {
          scss: {
            /** 如果引入多个文件,可以最外面括号括起
             * '@import "@/assets/scss/globalVariable1.scss"; @import"@/assets/scss/globalVariable2.scss";'
             **/
            // 如果是在 public 目录下的可以直接使用 /xxx.sass
            additionalData: '@import "@/assets/global.scss"; ',
          },
        },
      },
    }
  }

  if (command === 'build') {
    return {
      ...commonConfig,
      // 打包配置
      build: {
        // lib: {
        //   entry: path.resolve(__dirname, 'src/main.ts'), // 入口文件位置
        //   name: 'my-app',
        //   // fileName: (format) => `my-app.${format}.js`
        // },

        // outDir: 'dist', // 默认 dist - 指定输出路径

        assetsDir: 'static', // 默认 assets - 指定生成静态资源的存放路径,

        // assetsInlineLimit: 4096, // 默认: 4096(Byte) - assets 文件小于指定 Byte 时打包成 base64

        // chunkSizeWarningLimit: 1024, // 默认: 500(kb) - 打包 chunk 文件过大的警报阈值

        cssCodeSplit: true, // 默认 true - 是否拆分 css 启用时,在异步 chunk 中导入的 CSS 将内联到异步 chunk 本身,并在其被加载时插入。如果禁用,整个项目中的所有 CSS 将被提取到一个 CSS 文件中。

        // sourcemap: false, // 是否生成sourcemap (生产环境禁用)

        // minify: 'esbuild', // 混淆器,默认 esbuild 打包速度最快, terser 构建后文件体积更小(需要手动安装)

        // 清除console和debugger
        terserOptions: {
          compress: {
            drop_console: true,
            drop_debugger: true,
          },
        },

        // rollup 配置
        rollupOptions: {
          output: {
            //对静态文件进行打包处理(文件分类)
            chunkFileNames: 'assets/js/[name]-[hash].js',
            entryFileNames: 'assets/js/[name]-[hash].js',
            assetFileNames: 'assets/[ext]/[name]-[hash].[ext]',
          },
          // 排除的第三方库
          external: ['vue', 'ant-design-vue', 'moment', 'lodash'],
          plugins: [
            // key : 'vue' - 这里需要和external对应,这个字符串就是(import xxx from aaa)中的aaa,也就是包的名字
            // value: 'Vue' - 这个是第三方库 js 文件导出的全局变量的名字,比如说 vue 就是 Vue,需要查看源码或者参考作者文档
            externalGlobals({
              vue: 'Vue',
              lodash: '_',
              'ant-design-vue': 'antd',
              moment: 'moment',
            }),
          ],
        },
      },
    }
  }
})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值