最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue項(xiàng)目?jī)?yōu)雅實(shí)現(xiàn)自動(dòng)引入組件的方法詳解

 更新時(shí)間:2023年09月13日 10:00:00   作者:iceCode  
在我們寫(xiě)vue項(xiàng)目的時(shí)候,都會(huì)引入一些組件庫(kù),有時(shí)候有可能還不止一個(gè)組件庫(kù),那么如何優(yōu)雅的實(shí)現(xiàn)自動(dòng)引入組件呢,下面小編就來(lái)和大家詳細(xì)講講吧

前言

在我們寫(xiě)vue項(xiàng)目的時(shí)候,都會(huì)引入一些組件庫(kù),有時(shí)候有可能還不止一個(gè)組件庫(kù),這樣會(huì)使我們的項(xiàng)目打包之后特別龐大,再或者在組件內(nèi)使用大量的import引入所使用的組件,讓其打包之后的項(xiàng)目不那么龐大,不論哪一種對(duì)開(kāi)發(fā)者都不太友好。

接下來(lái)分享幾個(gè)插件,讓組件中使用較少的import或者不使用import就能按需引入組件供我們使用

  • unplugin-vue-components: 自動(dòng)按需因引入組件
  • vite-plugin-style-import:自動(dòng)引入樣式
  • unplugin-auto-import:自動(dòng)引入api
  • unplugin-icons:自動(dòng)引入圖標(biāo)

安裝的話應(yīng)該都會(huì) :

//直接npm i 梭哈
npm i unplugin-vue-components unplugin-auto-import vite-plugin-style-import unplugin-icons

unplugin-vue-components

安裝完成之后,在vite.confing.ts引入即可,在這里使用的element-plus組件庫(kù)

//vite.confing.ts 
import Components from "unplugin-vue-components/vite";
//引入餓了么的組件,只要安裝的ep,這里就會(huì)有提示的
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òng)導(dǎo)入自定義組件
      resolvers: [ElementPlusResolver()],//指定自動(dòng)引入的組件庫(kù),也就是從插件中導(dǎo)出的那個(gè)
    }),
   ],
});

這樣簡(jiǎn)單的配置就完成了,這個(gè)時(shí)候我們?cè)诮M件里面就可以為所欲為的使用組件了

app.vue

<template>
  <div>
    <el-button @click="btn">點(diǎn)擊</el-button>
    <!-- 在插件內(nèi),指定的路徑下,也可以直接使用自定義組件 -->
    <HelloWorld/>
  </div>
</template>
<script setup lang="ts">
const btn = () => {
  ElMessage.error("iceCode");
};
</script>

vite-plugin-style-import

當(dāng)然有時(shí)候,不是所有的組件都自帶樣式的,就例如antdv中的message提示組件,這個(gè)是需要單獨(dú)引入樣式的

這里就可以使用vite-plugin-style-import來(lái)對(duì)樣式的自動(dòng)導(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()],//這里引入
    }),
     //下面這種寫(xiě)法使在這個(gè)插件2.0之前的寫(xiě)法
    // styleImport( {
    //   libs: [
    //     {
    //       libraryName: "ant-design-vue",
    //       esModule: true,
    //       resolveStyle: (name: string) => {
    //         return `ant-design-vue/dist/antd.css`;
    //       },
    //     },
    //   ],
    // })
   ],
});

這個(gè)時(shí)候我們?cè)偈褂胊ntdv的message組件無(wú)需引入樣式也可以正常展示了

app.vue

<template>
  <div>
    <Button @click="btn">點(diǎn)擊</Button>
  </div>
</template>
<script setup lang="ts">
import { Button, message } from "ant-design-vue";
const btn = () => {
  message.success("iceCode");
};
</script>

unplugin-auto-import

在vue3選項(xiàng)式中,我們需要大量使用import引入vue的api,unplugin-auto-import可以使我們?cè)趯?xiě)vue的時(shí)候不用再引入refreactive等api了,減少了我們頻繁寫(xiě)import的次數(shù)

vite.confing.ts

import AutoImport from "unplugin-auto-import/vite"; //引入組件
export default defineConfig({
  plugins: [
   ///...
   AutoImport({
      imports: ["vue", "vue-router", "pinia", "@vueuse/core"],//這里是自動(dòng)引入api的項(xiàng)目
      dts: "./src/auto-imports.d.ts",//在這創(chuàng)建.d.ts文件
      resolvers: [ ElementPlusResolver()],//組件中的api也是可以自動(dòng)引入的,比如message是需要單獨(dú)引入的
    }),
   ],
});

這樣,我們?cè)僭趘ue3中進(jìn)行一些操作的時(shí)候就無(wú)需再引入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

如果項(xiàng)目中需要大量引入圖標(biāo)的時(shí)候,又不想手動(dòng)引入,就可以使用unplugin-icons來(lái)進(jìn)行自動(dòng)引入

vite.confing.ts

//自動(dòng)引入圖標(biāo)需要搭配自動(dòng)引入組件的插件來(lái)用
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òng)導(dǎo)入自定義組件
      resolvers: [IconsResolve()],//圖標(biāo)組件
     // { enabledCollections: ['ep'], },有的會(huì)在IconsResolve()中傳入這個(gè)參數(shù),但我測(cè)試不傳也是可以的
    }),
      Icons({
      //使用哪種框架解析
      compiler: "vue3",
      //是否自動(dòng)安裝
      autoInstall: true,
    }),
   ],
});

使用的時(shí)候也是有點(diǎn)特殊

<template>
  <div>
  <!-- 這是餓了么組件的icon使用,需要加上i-ep- 才能正常使用 -->
    <i-ep-user/>
  </div>
</template>

這個(gè)自動(dòng)引入icon的插件,如果不是項(xiàng)目中需要大量使用圖標(biāo),也不太推薦使用,使用的地方不太多,加入這個(gè)插件之后,會(huì)使打包的體積變大

整體代碼

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(),
    //自動(dòng)引入api
    AutoImport({
      imports: ["vue", "vue-router", "pinia", "@vueuse/core"],
      dts: "./src/auto-imports.d.ts",
      resolvers: [AntDesignVueResolver(), ElementPlusResolver()],
    } ),
    //自動(dòng)引入組件
    Components({
      dts: "./src/components.d.ts",
      extensions: ["vue"],
      dirs: ["src/components/"],
      resolvers: [
        AntDesignVueResolver({
          importStyle: false, // css in js
        }),
        ElementPlusResolver(),
        IconsResolve(),
      ],
    } ),
    // 自動(dòng)引入樣式
    createStyleImportPlugin({
      resolves: [AndDesignVueResolve(), ElementPlusResolve()],
    } ),
    //自動(dòng)引入icon
    Icons({
      //使用哪種框架解析
      compiler: "vue3",
      //是否自動(dòng)安裝
      autoInstall: true,
    }),
  ],
});

結(jié)尾

在自動(dòng)引入組件和自動(dòng)引入api中會(huì)發(fā)現(xiàn)有一個(gè)創(chuàng)建ts文件的屬性,如果是使用的ts項(xiàng)目,務(wù)必要寫(xiě),因?yàn)闀?huì)使ts報(bào)錯(cuò),默認(rèn)情況下這兩個(gè)插件會(huì)在根目錄下創(chuàng)建好.d.ts文件,但是我們的項(xiàng)目文件都在src目錄下,即使根目錄下有著ts文件,卻訪問(wèn)不到,這里就是主動(dòng)在src目錄下添加對(duì)應(yīng)的.d.ts文件,防止自動(dòng)引入之后ts不知道,給我們報(bào)錯(cuò)!

以上就是vue項(xiàng)目?jī)?yōu)雅實(shí)現(xiàn)自動(dòng)引入組件的方法詳解的詳細(xì)內(nèi)容,更多關(guān)于vue引入組件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue+element-ui實(shí)現(xiàn)頭部導(dǎo)航欄組件

    vue+element-ui實(shí)現(xiàn)頭部導(dǎo)航欄組件

    這篇文章主要為大家詳細(xì)介紹了vue+element-ui實(shí)現(xiàn)頭部導(dǎo)航欄組件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Vue?axios和vue-axios的關(guān)系及使用區(qū)別

    Vue?axios和vue-axios的關(guān)系及使用區(qū)別

    axios是基于promise的HTTP庫(kù),可以使用在瀏覽器和node.js中,它不是vue的第三方插件,vue-axios是axios集成到Vue.js的小包裝器,可以像插件一樣安裝使用:Vue.use(VueAxios, axios),本文給大家介紹Vue?axios和vue-axios關(guān)系,感興趣的朋友一起看看吧
    2022-08-08
  • vue prop屬性傳值與傳引用示例

    vue prop屬性傳值與傳引用示例

    今天小編就為大家分享一篇vue prop屬性傳值與傳引用示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • vue router 配置路由的方法

    vue router 配置路由的方法

    這篇文章主要介紹了vue router 配置路由的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Vue動(dòng)態(tài)添加表單的實(shí)現(xiàn)方法

    Vue動(dòng)態(tài)添加表單的實(shí)現(xiàn)方法

    在Vue.js應(yīng)用中,動(dòng)態(tài)表單是一個(gè)常見(jiàn)的需求,尤其是當(dāng)表單字段的數(shù)量和類型需要根據(jù)用戶輸入或系統(tǒng)狀態(tài)動(dòng)態(tài)變化時(shí),本文將詳細(xì)介紹如何在Vue中實(shí)現(xiàn)動(dòng)態(tài)表單的創(chuàng)建,并通過(guò)多個(gè)示例展示具體的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2024-09-09
  • Vue3中父子組件之間相互通信的方式詳解

    Vue3中父子組件之間相互通信的方式詳解

    本文主要探討了 Vue 3 中父子組件之間的通信方式,包括父?jìng)髯?通過(guò)props傳遞數(shù)據(jù)和方法;子傳父,用emit觸發(fā)自定義事件并傳遞數(shù)據(jù);還介紹了使用ref直接操作子組件實(shí)例,借助defineExpose暴露子組件的屬性和方法給父組件,需要的朋友可以參考下
    2025-01-01
  • 如何使用vue開(kāi)發(fā)公眾號(hào)網(wǎng)頁(yè)

    如何使用vue開(kāi)發(fā)公眾號(hào)網(wǎng)頁(yè)

    因?yàn)轫?xiàng)目需要,近期做了一個(gè)公眾號(hào)網(wǎng)頁(yè)開(kāi)發(fā)。在此期間也踩了一些坑,解決這些坑之后,準(zhǔn)備對(duì)這個(gè)項(xiàng)目進(jìn)行復(fù)盤(pán)。記錄下項(xiàng)目從開(kāi)發(fā)到上線所解決的問(wèn)題,并對(duì)使用vue進(jìn)行公眾號(hào)開(kāi)發(fā)的步驟進(jìn)行一個(gè)總結(jié)。方便以后有問(wèn)題進(jìn)行查閱。希望對(duì)你有所幫助
    2021-05-05
  • 安裝vue/cli后查看版本顯示找不到vue指令的解決

    安裝vue/cli后查看版本顯示找不到vue指令的解決

    這篇文章主要介紹了安裝vue/cli后查看版本顯示找不到vue指令的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 從零寫(xiě)vue日歷組件

    從零寫(xiě)vue日歷組件

    最近做項(xiàng)目遇到一個(gè)需求,需要制作一個(gè)定制化的日歷組件,本文主要介紹了從零寫(xiě)vue日歷組件,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Vant 中的Toast設(shè)置全局的延遲時(shí)間操作

    Vant 中的Toast設(shè)置全局的延遲時(shí)間操作

    這篇文章主要介紹了Vant 中的Toast設(shè)置全局的延遲時(shí)間操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11

最新評(píng)論

和顺县| 昭通市| 绵竹市| 莆田市| 乌鲁木齐县| 乳源| 商丘市| 虹口区| 安仁县| 左云县| 湖北省| 宁城县| 新乐市| 治县。| 鄱阳县| 重庆市| 屏南县| 文水县| 新源县| 佛坪县| 涟源市| 泌阳县| 湖北省| 沭阳县| 卢龙县| 澎湖县| 涿州市| 开远市| 邻水| 广昌县| 新干县| 淮安市| 贵阳市| 万安县| 民乐县| 南阳市| 芷江| 潼南县| 山西省| 通许县| 思茅市|