Vue项目打包优化:自动导入和按需引入Naive UI

背景 :刚刚看了下后台管理系统,竟然是全局引入的Naive UI。这点可以进行按需引入优化。
需求减少打包后文件的体积,同时减少打包耗时。提升打包速度。

会用到的插件

rollup-plugin-visualizer 用于分析代码的大小和依赖关系。
unplugin-auto-import 自动导入API(在SFC内)。 例如vue的各种api。
unplugin-vue-components 按需自动加载组件,插件会自动解析模板中的使用到的组件,并导入组件。(在SFC内)

SFC: 单文件组件,以.vue为扩展名,一般包含 <template> <script> <style>

安装打包分析插件 rollup-plugin-visualizer

js 复制代码
yarn add  rollup-plugin-visualizer

vite.config.ts文件

js 复制代码
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import visualizer from 'rollup-plugin-visualizer';

export default defineConfig({
  plugins: [
    visualizer(),
    vue()
  ]
})

全局引入方式导入的打包体积:

main.ts文件

js 复制代码
import { createApp } from "vue";
import App from "./App.vue";
import router from "@/router/index";
import { createPinia } from "pinia";
import naive from "naive-ui";
import { setupDirectives } from "@/plugins";
import "@/permission";
const app = createApp(App);
app.use(createPinia());
setupDirectives(app);
app.use(router);
app.use(naive);
app.mount("#app");

执行打包:

打包耗时:147秒

访问根目录下的stats.html网页

NaiveUI 打包后的体积2.16MB

按需引入naive-ui打包

使用 unplugin-auto-import 插件来自动导入 API(在SFC内)。

使用 unplugin-vue-components 插件来按需自动加载组件,插件会自动解析模板中的使用到的组件,并导入组件。(模板:SFC的template标签)(在SFC内)

安装unplugin插件

js 复制代码
yarn add unplugin-auto-import
yarn add unplugin-vue-components

vite.config.ts文件

js 复制代码
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { NaiveUiResolver } from 'unplugin-vue-components/resolvers'
import visualizer from 'rollup-plugin-visualizer';

export default defineConfig({
  plugins: [
    visualizer(),
    vue(),
    AutoImport({
      imports: [
        'vue',
        {
          'naive-ui': [
            'useDialog',
            'useMessage',
            'useNotification',
            'useLoadingBar'
          ]
        }
      ]
    }),
    Components({
      resolvers: [NaiveUiResolver()]
    })
  ]
})

main.ts文件

js 复制代码
import { createApp } from "vue";
import App from "./App.vue";
import router from "@/router/index";
import { createPinia } from "pinia";
//import naive from "naive-ui";
import { setupDirectives } from "@/plugins";
import "@/permission";
const app = createApp(App);
app.use(createPinia());
setupDirectives(app);
app.use(router);
//app.use(naive);
app.mount("#app");

执行打包:

打包耗时:134秒

NaiveUI打包后的体积减小到 721KB

总结

通过配置 unplugin-auto-importunplugin-vue-components 插件,打包速度减少了14秒,打包后的代码体积从2.1MB减少到700KB,减少了1.4MB的体积。

补充:

配置unplugin-auto-imporunplugin-vue-components插件后的效果如下:

vue 复制代码
<template>
  <nInput v-model:value="msg" />
</template>

<script setup lang="ts">
// 插件解析SFC文件的时候会自动加上下面两行,可以省下引入组件和模块的工作量。提高开发效率。
// import { NInput } from 'naive-ui'
// import { ref } from 'vue'
const msg = ref('')
</script>
相关推荐
前端爆冲4 分钟前
项目中无用export的检测方案
前端
热爱编程的小曾31 分钟前
sqli-labs靶场 less 8
前端·数据库·less
gongzemin43 分钟前
React 和 Vue3 在事件传递的区别
前端·vue.js·react.js
Apifox1 小时前
如何在 Apifox 中通过 Runner 运行包含云端数据库连接配置的测试场景
前端·后端·ci/cd
树上有只程序猿1 小时前
后端思维之高并发处理方案
前端
庸俗今天不摸鱼2 小时前
【万字总结】前端全方位性能优化指南(十)——自适应优化系统、遗传算法调参、Service Worker智能降级方案
前端·性能优化·webassembly
黄毛火烧雪下2 小时前
React Context API 用于在组件树中共享全局状态
前端·javascript·react.js
Apifox2 小时前
如何在 Apifox 中通过 CLI 运行包含云端数据库连接配置的测试场景
前端·后端·程序员
一张假钞2 小时前
Firefox默认在新标签页打开收藏栏链接
前端·firefox
高达可以过山车不行2 小时前
Firefox账号同步书签不一致(火狐浏览器书签同步不一致)
前端·firefox