vue組件庫如何按需引入之babel-plugin-import

組件庫的按需引用可以精簡項目資源大小应民,提升項目性能吼拥。目前使用廣泛的組件庫倚聚,如element、iview凿可、antd等都可以按需引入了惑折。那如何實現(xiàn)組件庫的按需引入呢?

需求解析

比如一個vue項目的組件庫:ComponentsDemo矿酵,全局引入組件庫的代碼為:

import vsuite from "vsuite";
Vue.use(vsuite);

需要按需引入的時候唬复,代碼為:

import  ComponentA   from "ComponentsDemo/src/components/component-a ";
vue.component("ComponentA ", ComponentA );

這樣寫,其實已經(jīng)滿足了我們的需求全肮。但是這樣寫不是很優(yōu)雅敞咧,那么,怎么簡化import ComponentA from "ComponentsDemo/src/components/component-a ";呢辜腺?這就設(shè)計到對import語句的解析轉(zhuǎn)化了休建。
由此想到了Babel乍恐,我們知道Babel 是一個 JavaScript 編譯器,主要用于將 ECMAScript 2015+ 版本的代碼轉(zhuǎn)換為向后兼容的 JavaScript 語法测砂,以便能夠運行在當(dāng)前和舊版本的瀏覽器或其他環(huán)境中茵烈。而Babel插件可以在輸入源碼 => 輸出編譯后的代碼的過程中做一些操作,比如實現(xiàn)以下代碼:

import { ComponentA, ComponentB } from 'ComponentsDemo';

↓ ↓ ↓ ↓ ↓ ↓

import  ComponentA   from "ComponentsDemo/src/components/component-a ";
import  ComponentB   from "ComponentsDemo/src/components/component-b ";

能實現(xiàn)這一步驟的babel插件之中砌些,babel-plugin-import使用的比較多呜投。

babel-plugin-import

babel-plugin-import是阿里開源的一款babel插件,其主要用于組件的按需引入存璃。
babel-plugin-import npm鏈接
關(guān)于babel-plugin-import的制作思路可以看這篇文章:手把手教你開發(fā)一個babel-plugin

vue組件庫按需引入設(shè)置

自定義的vue組件庫ComponentsDemo仑荐,想要讓它可以被按需引入,需要注意目錄等的構(gòu)成方式纵东。
根據(jù)babel-plugin-import.babelrc中的設(shè)置粘招,如果.babelrc設(shè)置如下:

{
  "plugins": [
    [
      "import",
      {
        "libraryName": "ComponentsDemo",
        "libraryDirectory": "src/components"
      }
    ]
  ]
}

babel-plugin-import在讀取以下代碼時:

import { ComponentA } from "ComponentsDemo";
vue.component("ComponentA ", ComponentA );

查找引入組件庫中的組件的代碼解析如下:

import  ComponentA   from "ComponentsDemo/src/components/component-a ";

根據(jù)查找的規(guī)則,ComponentA 是ComponentsDemo組件庫下src/components/目錄下的文件名或者目錄名偎球,第一個字母大寫會被轉(zhuǎn)成小寫(如ComponentA 為Icon洒扎,找的文件名就是icon),駝峰命名會被轉(zhuǎn)成-來連接(如ComponentA 為MenuItem衰絮,會查找名為menu-item的文件)袍冷。
故此,我們的組件庫的結(jié)構(gòu)可以為:

...
- src
    - components
        - component-a
            - index.vue
        - component-b
            - index.vue
        - component-c
            - index.vue
-- -- index.js
...

組件的導(dǎo)出文件index.js的結(jié)構(gòu):

import ComponentA from './components/component-a';
import ComponentB from './components/component-b';
import ComponentC from './components/component-c';

export default {
    ComponentA ,
    ComponentB ,
    ComponentC 
}

需要注意components目錄下的文件名需要和組件名對應(yīng)岂傲,需要能對應(yīng)解析到难裆。

按需引入組件庫

在需要引入組件庫的項目Test中,首先安裝babel-plugin-import:

npm i babel-plugin-import -D

根目錄下新建文件.babelrc

{
  "plugins": [
    [
      "import",
      {
        "libraryName": "ComponentsDemo",
        "libraryDirectory": "src/components"
      }
    ]
  ]
}

入口文件中按需引入組件:

import { ComponentA , ComponentB } from "ComponentsDemo";
vue.component("ComponentA", ComponentA);
vue.component("ComponentB", ComponentB);

注意如果你的組件庫的樣式?jīng)]有跟組件放在一起時镊掖,需要額外引入組件樣式:

import "~A/src/styles/index.scss";

此時npm run build --report時,可以打開report.html查看到組件庫的引入已經(jīng)是按需引入了褂痰。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末亩进,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子缩歪,更是在濱河造成了極大的恐慌归薛,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匪蝙,死亡現(xiàn)場離奇詭異主籍,居然都是意外死亡,警方通過查閱死者的電腦和手機逛球,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門千元,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人颤绕,你說我怎么就攤上這事幸海∷钌恚” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵物独,是天一觀的道長袜硫。 經(jīng)常有香客問我,道長挡篓,這世上最難降的妖魔是什么婉陷? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮官研,結(jié)果婚禮上秽澳,老公的妹妹穿的比我還像新娘。我一直安慰自己阀参,他們只是感情好肝集,可當(dāng)我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蛛壳,像睡著了一般杏瞻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上衙荐,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天捞挥,我揣著相機與錄音,去河邊找鬼忧吟。 笑死砌函,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的溜族。 我是一名探鬼主播讹俊,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼煌抒!你這毒婦竟也來了仍劈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤寡壮,失蹤者是張志新(化名)和其女友劉穎贩疙,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體况既,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡这溅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了棒仍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悲靴。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖降狠,靈堂內(nèi)的尸體忽然破棺而出对竣,到底是詐尸還是另有隱情庇楞,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布否纬,位于F島的核電站吕晌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏临燃。R本人自食惡果不足惜睛驳,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望膜廊。 院中可真熱鬧乏沸,春花似錦、人聲如沸爪瓜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铆铆。三九已至蝶缀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間薄货,已是汗流浹背翁都。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谅猾,地道東北人柄慰。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像税娜,于是被迫代替她去往敵國和親坐搔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容