vue項目優(yōu)雅實現(xiàn)自動引入組件的方法詳解
前言
在我們寫vue項目的時候,都會引入一些組件庫,有時候有可能還不止一個組件庫,這樣會使我們的項目打包之后特別龐大,再或者在組件內(nèi)使用大量的import
引入所使用的組件,讓其打包之后的項目不那么龐大,不論哪一種對開發(fā)者都不太友好。
接下來分享幾個插件,讓組件中使用較少的import
或者不使用import
就能按需引入組件供我們使用
unplugin-vue-components
: 自動按需因引入組件vite-plugin-style-import
:自動引入樣式unplugin-auto-import
:自動引入apiunplugin-icons
:自動引入圖標
安裝的話應(yīng)該都會 :
//直接npm i 梭哈 npm i unplugin-vue-components unplugin-auto-import vite-plugin-style-import unplugin-icons
unplugin-vue-components
安裝完成之后,在vite.confing.ts
引入即可,在這里使用的element-plus組件庫
//vite.confing.ts import Components from "unplugin-vue-components/vite"; //引入餓了么的組件,只要安裝的ep,這里就會有提示的 import { ElementPlusResolver } from "unplugin-vue-components/resolvers"; export default defineConfig({ plugins: [ //... Components({ dts: "./src/components.d.ts",//創(chuàng)建ts文件 extensions:['vue'],//指定文件的后綴 dirs: ["src/components/"],//指定路徑,自動導(dǎo)入自定義組件 resolvers: [ElementPlusResolver()],//指定自動引入的組件庫,也就是從插件中導(dǎo)出的那個 }), ], });
這樣簡單的配置就完成了,這個時候我們在組件里面就可以為所欲為的使用組件了
app.vue
<template> <div> <el-button @click="btn">點擊</el-button> <!-- 在插件內(nèi),指定的路徑下,也可以直接使用自定義組件 --> <HelloWorld/> </div> </template> <script setup lang="ts"> const btn = () => { ElMessage.error("iceCode"); }; </script>
vite-plugin-style-import
當然有時候,不是所有的組件都自帶樣式的,就例如antdv中的message提示組件,這個是需要單獨引入樣式的
這里就可以使用vite-plugin-style-import
來對樣式的自動導(dǎo)入了
vite.confing.ts
import { createStyleImportPlugin, AndDesignVueResolve} from "vite-plugin-style-import"; //2.0之前 //import styleImport { AndDesignVueResolve} from "vite-plugin-style-import"; export default defineConfig({ plugins: [ //... createStyleImportPlugin({ resolves: [AndDesignVueResolve()],//這里引入 }), //下面這種寫法使在這個插件2.0之前的寫法 // styleImport( { // libs: [ // { // libraryName: "ant-design-vue", // esModule: true, // resolveStyle: (name: string) => { // return `ant-design-vue/dist/antd.css`; // }, // }, // ], // }) ], });
這個時候我們再使用antdv的message組件無需引入樣式也可以正常展示了
app.vue
<template> <div> <Button @click="btn">點擊</Button> </div> </template> <script setup lang="ts"> import { Button, message } from "ant-design-vue"; const btn = () => { message.success("iceCode"); }; </script>
unplugin-auto-import
在vue3選項式中,我們需要大量使用import引入vue的api,unplugin-auto-import
可以使我們在寫vue的時候不用再引入ref
,reactive
等api了,減少了我們頻繁寫import的次數(shù)
vite.confing.ts
import AutoImport from "unplugin-auto-import/vite"; //引入組件 export default defineConfig({ plugins: [ ///... AutoImport({ imports: ["vue", "vue-router", "pinia", "@vueuse/core"],//這里是自動引入api的項目 dts: "./src/auto-imports.d.ts",//在這創(chuàng)建.d.ts文件 resolvers: [ ElementPlusResolver()],//組件中的api也是可以自動引入的,比如message是需要單獨引入的 }), ], });
這樣,我們再在vue3中進行一些操作的時候就無需再引入api了
app.vue
<script setup lang="ts"> const num = ref<number>(0); const newNum = computed<number>( () => num.value + 1 ); interface n{ n:number } const numObj = reactive<n>({ n: newNum.value, }); console.log(toRaw(numObj)); </script>
unplugin-icons
如果項目中需要大量引入圖標的時候,又不想手動引入,就可以使用unplugin-icons
來進行自動引入
vite.confing.ts
//自動引入圖標需要搭配自動引入組件的插件來用 import Components from "unplugin-vue-components/vite"; import Icons from "unplugin-icons/vite"; import IconsResolve from "unplugin-icons/resolver"; export default defineConfig({ plugins: [ //... Components({ dts: "./src/components.d.ts",//創(chuàng)建ts文件 extensions:['vue'],//指定文件的后綴 dirs: ["src/components/"],//指定路徑,自動導(dǎo)入自定義組件 resolvers: [IconsResolve()],//圖標組件 // { enabledCollections: ['ep'], },有的會在IconsResolve()中傳入這個參數(shù),但我測試不傳也是可以的 }), Icons({ //使用哪種框架解析 compiler: "vue3", //是否自動安裝 autoInstall: true, }), ], });
使用的時候也是有點特殊
<template> <div> <!-- 這是餓了么組件的icon使用,需要加上i-ep- 才能正常使用 --> <i-ep-user/> </div> </template>
這個自動引入icon的插件,如果不是項目中需要大量使用圖標,也不太推薦使用,使用的地方不太多,加入這個插件之后,會使打包的體積變大
整體代碼
import { defineConfig } from "vite"; import vue from "@vitejs/plugin-vue"; import Components from "unplugin-vue-components/vite"; import AutoImport from "unplugin-auto-import/vite"; import Icons from "unplugin-icons/vite"; import IconsResolve from "unplugin-icons/resolver"; import { AntDesignVueResolver, ElementPlusResolver } from "unplugin-vue-components/resolvers"; import { createStyleImportPlugin, AndDesignVueResolve, ElementPlusResolve } from "vite-plugin-style-import"; // https://vitejs.dev/config/ export default defineConfig({ plugins: [ vue(), //自動引入api AutoImport({ imports: ["vue", "vue-router", "pinia", "@vueuse/core"], dts: "./src/auto-imports.d.ts", resolvers: [AntDesignVueResolver(), ElementPlusResolver()], } ), //自動引入組件 Components({ dts: "./src/components.d.ts", extensions: ["vue"], dirs: ["src/components/"], resolvers: [ AntDesignVueResolver({ importStyle: false, // css in js }), ElementPlusResolver(), IconsResolve(), ], } ), // 自動引入樣式 createStyleImportPlugin({ resolves: [AndDesignVueResolve(), ElementPlusResolve()], } ), //自動引入icon Icons({ //使用哪種框架解析 compiler: "vue3", //是否自動安裝 autoInstall: true, }), ], });
結(jié)尾
在自動引入組件和自動引入api中會發(fā)現(xiàn)有一個創(chuàng)建ts文件的屬性,如果是使用的ts項目,務(wù)必要寫,因為會使ts報錯,默認情況下這兩個插件會在根目錄下創(chuàng)建好.d.ts文件,但是我們的項目文件都在src目錄下,即使根目錄下有著ts文件,卻訪問不到,這里就是主動在src目錄下添加對應(yīng)的.d.ts文件,防止自動引入之后ts不知道,給我們報錯!
以上就是vue項目優(yōu)雅實現(xiàn)自動引入組件的方法詳解的詳細內(nèi)容,更多關(guān)于vue引入組件的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
基于Vue+element-ui 的Table二次封裝的實現(xiàn)
這篇文章主要介紹了基于Vue+element-ui 的Table二次封裝的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07Vue3組合式函數(shù)Composable實戰(zhàn)ref和unref使用
這篇文章主要為大家介紹了Vue3組合式函數(shù)Composable實戰(zhàn)ref和unref使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06