Ⅰ、Vue + Vite 构建项目性能优化

文章目录

    • Ⅰ、Vue + Vite 构建项目性能优化
    • Ⅱ、Vue +Vite的优化有那些?
      • 1. ui组件库的优化
      • 2. Icon 图标优化
      • 3. js最小拆包
      • 4. 路由懒加载
      • 5. 个人vite.config 配置参考

Ⅱ、Vue +Vite的优化有那些?

1. ui组件库的优化

① 安装:

	npm  i  -D unplugin-vue-components

② main.js => 无需配置

③ 只需配置 => vite.config


import Components from 'unplugin-vue-components/vite' // 按需加载自定义组件
import { ElementPlusResolver, AntDesignVueResolver} from 'unplugin-vue-components/resolvers'
export default defineConfig {
  // ...
  plugins: [
    // 按需引入
    Components({
      dts: true,
      dirs: ['src/components'], // 按需加载的文件夹
      resolvers: [
          ElementPlusResolver(),  // Antd   按需加载
          AntDesignVueResolver()  // ElementPlus按需加载
     ] 
    })
  ],
  // ..................................
}

2. Icon 图标优化

① 安装插件

	npm i -D unplugin-icons     //安装

② 安装 Icon库 (全量 和 选择)

	npm i -D @iconify/json
	npm i -D @iconify-json/carbon    => 只下载该图标集

③ 配置 vite.config

...
import Components from 'unplugin-vue-components/vite'
import Icons from 'unplugin-icons/vite'
import IconsResolver from 'unplugin-icons/resolver'
...
export default {
  plugins: [
    vue(),
    Components({
      resolvers: [
        IconsResolver(),
      ]
    }),
    Icons({ autoInstall: true }),
  ],
}

④ vue 中 直接使用

⑤ 示例如下

	<i-carbon-4k />

vue3 + vite 性能优化 ( 从5s -> 0.5s )

3. js最小拆包

  output: {
    // 最小化拆分包
    manualChunks(id) {
      if (id.includes('node_modules')) {
        return id.toString().split('node_modules/')[1].split('/')[0].toString();
      }
    }
  },

4. 路由懒加载

5. 个人vite.config 配置参考

达到效果 => 点击体验

import { defineConfig } from "vite";  // 帮手函数,这样不用 jsdoc 注解也可以获取类型提示
import { resolve } from "path"; // 主要用于alias文件路径别名
import vue from '@vitejs/plugin-vue';
import Components from 'unplugin-vue-components/vite';
// icon 按需引入
import Icons from 'unplugin-icons/vite';
import IconsResolver from 'unplugin-icons/resolver';
// Antd 按需引入
import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers'
export default defineConfig({
  plugins: [
    vue(), // 配置需要使用的插件列表
    Components({
      resolvers: [
        IconsResolver(),
        AntDesignVueResolver()
      ]
    }),
    Icons({ autoInstall: true }),
  ],
  css: {
    preprocessorOptions: {
      less: {
        javascriptEnabled: true,
      },
    },
  },
  resolve: {
    alias: {
      "/@": resolve("src"),
    }
  },
  // 强制预构建插件包
  optimizeDeps: {
    include: ['axios'],  //用于鉴权
  },
  // 打包配置
  build: {
    target: 'modules',
    outDir: 'dist', //指定输出路径
    assetsDir: 'assets', // 指定生成静态资源的存放路径
    rollupOptions: {
      minify: 'terser',// 混淆器,terser构建后文件体积更小
      output: {
        manualChunks(id) {
          if (id.includes('node_modules')) {
            return id.toString().split('node_modules/')[1].split('/')[0].toString();
          }
        }
      },
    },
  },
  server: {  // 本地 - 运行配置,及反向代理配置
    cors: true, // 默认启用并允许任何源
    open: true, // 在服务器启动时自动在浏览器中打开应用程序
    proxy: {
      '/api': {
        target: 'http://localhost:7001',   //代理接口
        changeOrigin: true,
      }
    }
  }
})

发表回复