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-import 和 unplugin-vue-components 插件,打包速度减少了14秒,打包后的代码体积从2.1MB减少到700KB,减少了1.4MB的体积。

补充:

配置unplugin-auto-impor和unplugin-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>
相关推荐
赛博守夜人8 小时前
AI安全攻防与治理之十四:AI 安全测试不能脱离传统安全,Web、API、移动端与模型攻击面的组合拳
前端·人工智能·安全
开开心心_Every9 小时前
快速隐藏程序工具自定义快捷键一键切换
java·开发语言·前端·spring·智能手机·word·intellij-idea
networknomad9 小时前
OpenReplay:自己搭的会话回放工具,给前端排错用的
前端·其他
缓慢更新10 小时前
AI 辅助生成单测:从接口定义到用例的流水线
java·服务器·前端·网络·数据库·人工智能
陈随易10 小时前
AI 运维服务器,安全又可靠的方法
前端·后端·程序员
风骏时光牛马11 小时前
AI稳定性治理体系构建与疑难问题深度分析
前端
IT_陈寒12 小时前
JavaScript的this坑人实录,这次我真的记下来了
前端·人工智能·后端
开开心心就好13 小时前
音频降噪剪辑工具,音量裁剪一键处理
运维·服务器·前端·spring·ocr·音视频·1024程序员节
PedroQue9914 小时前
0.8.2 新增 backFallback 配置,无 tabbar 页返回无忧
前端·uni-app
淡漠的蓝精灵15 小时前
web.py:一个简单到极致的 Python Web 框架
开发语言·前端·python·其他