分享一份项目中使用的vite.config.ts的配置项集合

分享一份项目中使用的vite.config.ts的配置项集合

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import path from 'path';
import AutoImport from 'unplugin-auto-import/vite';
import Components from 'unplugin-vue-components/vite';
// ElementPlus
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
// 图标
import Icons from 'unplugin-icons/vite';
import IconsResolver from 'unplugin-icons/resolver';
// mock 数据
import { viteMockServe } from 'vite-plugin-mock';
// 打包体积分析
import { visualizer } from 'rollup-plugin-visualizer';
// Gzip文件压缩
import viteCompression from 'vite-plugin-compression';
// 图片压缩
import viteImagemin from 'vite-plugin-imagemin';

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    viteMockServe(),
    AutoImport({
      resolvers: [
        // 自动导入element-plus组件
        ElementPlusResolver(),
        // 自动导入图标组件
        IconsResolver({
          prefix: 'Icon',
        }),
      ],
      include: [
        /\.[tj]sx?$/, // .ts, .tsx, .js, .jsx
        /\.vue$/,
        /\.vue\?vue/, // .vue
        /\.md$/, // .md
      ],
      // 自动导入vue,vue-router, @vueuse/core相关函数,如ref,reactive
      imports: ['vue', 'vue-router'],
      // 可以选择auto-import.d.ts生成的位置,使用ts建议设置为'src/types/auto-import.d.ts'
      dts: 'src/types/auto-import.d.ts',
    }), // 自动下载图标
    Icons({
      autoInstall: true,
      compiler: 'vue3',
    }),
    Components({
      resolvers: [
        ElementPlusResolver(),
        IconsResolver({
          // icon前缀默认i,使用方式:<i-ep-xxx/>
          // prefix: 'i',
          // 指定图标集ep
          enabledCollections: ['ep'],
        }),
      ],
      dirs: ['src/components'],
      // 可以选择components.d.ts生成的位置,使用ts建议设置为'src/types/components.d.ts'
      dts: 'src/types/components.d.ts',
    }),
    // 打包体积分析
    visualizer({
      open: true,
      filename: 'visualizer.html', // 分析图生成的文件名
    }),
    // 开启Gzip压缩
    viteCompression({
      verbose: true, // 是否在控制台中输出压缩结果
      disable: false,
      threshold: 1024, // 如果体积大于阈值,将被压缩,单位为b,体积过小时请不要压缩,以免适得其反
      algorithm: 'gzip', // 压缩算法,可选['gzip',' brotliccompress ','deflate ','deflateRaw']
      ext: '.gz',
      deleteOriginFile: true, // 源文件压缩后是否删除(我为了看压缩后的效果,先选择了true)
    }),
    // 图片资源压缩
    viteImagemin({
      gifsicle: {
        // gif图片压缩
        optimizationLevel: 3, // 选择1到3之间的优化级别
        interlaced: false, // 隔行扫描gif进行渐进式渲染
      },
      optipng: {
        // png
        optimizationLevel: 7, // 选择0到7之间的优化级别
      },
      mozjpeg: {
        // jpeg
        quality: 20, // 压缩质量,范围从0(最差)到100(最佳)。
      },
      pngquant: {
        // png
        quality: [0.8, 0.9], // Min和max是介于0(最差)到1(最佳)之间的数字,类似于JPEG。达到或超过最高质量所需的最少量的颜色。如果转换导致质量低于最低质量,图像将不会被保存。
        speed: 4, // 压缩速度,1(强力)到11(最快)
      },
      svgo: {
        plugins: [
          // svg压缩
          {
            name: 'removeViewBox',
          },
          {
            name: 'removeEmptyAttrs',
            active: false,
          },
        ],
      },
    }),
  ],
  server: {
    port: 3000,
    host: '0.0.0.0',
    open: false, // 自动打开浏览器
    proxy: {
      // 字符串简写写法
      // '/foo1': 'http://liang.web.com:3001/foo2',
      // 选项写法
      '/api': {
        target: '',
        changeOrigin: true,
        rewrite: path => path.replace(/^\/api/, ''),
      },
      // 正则表达式写法
      // '^/fallback/.*': {
      //   target: '',
      //   changeOrigin: true,
      //   rewrite: (path) => path.replace(/^\/fallback/, '')
      // },
    },
  },
  resolve: {
    alias: {
      '@': path.resolve(__dirname, './src'), // 设置别名
    },
  },
  css: {
    preprocessorOptions: {
      // 全局sass变量引入
      scss: {
        additionalData: '@use "./src/styles/globalVariable/index.scss" as *;',
      },
    },
  },
  // 生产环境打包配置
  build: {
    minify: 'terser',
    terserOptions: {
      // 去除 console debugger
      compress: {
        drop_console: true,
        drop_debugger: true,
      },
    },
    rollupOptions: {
      output: {
        chunkFileNames: 'js/[name]-[hash].js', // 引入文件名的名称
        entryFileNames: 'js/[name]-[hash].js', // 包的入口文件名称
        assetFileNames: '[ext]/[name]-[hash].[ext]', // 资源文件像 字体,图片等
        // 最小化拆分包 node_modules的包逐个打包 将需要分离的包单独的打包出来
        manualChunks(id) {
          // 静态资源分拆打包
          if (id.includes('node_modules')) {
            return id.toString().split('node_modules/')[1].split('/')[0].toString();
          }
        },
      },
    },
  },
  optimizeDeps: {
    include: [],
  },
});

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vite项目,我们可以通过安装Axios库来完成对配置文件的读取。首先,我们需要在项目根目录下创建一个配置文件,例如 `config.js`。在该文件,可以定义我们需要的各种配置,例如接口请求的URL、请求的超时时间等。示例代码如下: ```javascript const config = { baseUrl: 'http://example.com/api', timeout: 5000, // 更多的配置... }; export default config; ``` 然后,在需要使用配置文件的地方,我们可以使用Axios的`get`方法来获取配置文件的内容。示例代码如下: ```javascript import axios from 'axios'; import config from './config'; axios.get('/config.js').then(response => { // 获取到配置文件的内容 const configFile = response.data; // 使用配置文件的值 const baseUrl = configFile.baseUrl; const timeout = configFile.timeout; // 更多处理... }).catch(error => { // 处理错误 }); ``` 在上述代码,我们通过调用Axios的`get`方法来获取配置文件。这个方法返回一个Promise对象,通过`.then()`来处理成功的回调函数,`.catch()`来处理错误的回调函数。在成功的回调函数,我们可以通过`response.data`来获取配置文件的内容。然后,我们就可以根据需要使用配置文件的值了。例如,可以将配置文件的baseUrl作为请求接口的根路径,timeout作为超时时间等。 需要注意的是,由于使用了Promise对象,所以代码的Axios请求是异步的,需要通过`.then()`方法来处理获取到的配置文件内容。同时,为了避免可能发生的错误,我们也可以在`.catch()`方法处理错误情况。 希望以上内容能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值