你真的搞懂ES6模塊的導(dǎo)入導(dǎo)出規(guī)則了嗎

前言

模塊作為ES6規(guī)范的核心部分之一乱灵,在實際項目開發(fā)中經(jīng)常會看到它的身影伐谈,那么我們是否真正了解它的相關(guān)規(guī)則呢塞颁,今天就帶大家一起了解一下模塊的導(dǎo)入導(dǎo)出規(guī)則

導(dǎo)入

ES6模塊的導(dǎo)入(即import)大致分為:命名導(dǎo)入踩麦、命名空間導(dǎo)入球切、默認導(dǎo)入虹曙、空導(dǎo)入迫横;那怎么知道用哪種方式來導(dǎo)入源模塊呢?下面我們通過幾個具體的場景看看

場景1:只想導(dǎo)入源模塊的部分內(nèi)容

假設(shè)a.js是以如下方式導(dǎo)出的

// a.js
export var num = 100
export var name = '王小明'

那么如果我們只需要a模塊的num酝碳,就應(yīng)該按下面的方式導(dǎo)入它

// b.js
import {num} from './a.js'

console.log(num) // 100

此處的模塊導(dǎo)入利用了ES6的解構(gòu)方式矾踱,相關(guān)知識大家如果感興趣可以參考阮一峰老師的《變量的解構(gòu)賦值》一章

場景2:不滿意源模塊所導(dǎo)出的變量或方法的名稱,想要為它們另起名稱

假設(shè)a.js中有一個名稱如此晦澀的變量gddhauabsg

// a.js
export var gddhauabsg = 100

忍不住想要重命名這個變量的名稱疏哗,但是又無權(quán)或不想修改源模塊的話呛讲,那么不妨這么做

// b.js
// 如此,我們就可以在b.js中愉快的使用num了
import {gddhauabsg as num} from './a.js'

console.log(num) // 100

場景3:想要把源模塊的所有導(dǎo)出都導(dǎo)入進來返奉,但偏偏源模塊不是以export default方式導(dǎo)出的

假設(shè)a模塊將每個變量都單獨贝搁,且聲明時立即導(dǎo)出

// a.js
export var num = 100
export var name = '王小明'

那么我們就要這樣導(dǎo)入a的所有導(dǎo)出

// b.js
import * as moduleA from './a.js'

console.log(moduleA.num)  // 100
console.log(moduleA.name) // '王小明'

解釋一哈:*代表源模塊(除去export default)的所有導(dǎo)出的集合,該集合類似Object類型芽偏,*就相當于{num: 100, name: '王小明'}雷逆,所以在源模塊沒有使用export default導(dǎo)出時,我們就可以使用上面的方式導(dǎo)入源模塊的所有導(dǎo)出

場景4:源模塊并沒有對外暴露任何導(dǎo)出

a模塊沒有導(dǎo)出任何內(nèi)容

// a.js
var arr = [1, 2, 3]
for (var i = 0;i < arr.length;i++) {
    console.log(arr[i])
}

那么b文件將a.js文件整個引入就好了

// b.js
// 此處會執(zhí)行a.js的所有代碼邏輯
import './a.js'

那么有些童鞋可能會有個疑問“這種導(dǎo)入方式的應(yīng)用場景在哪污尉?”膀哲,不知道大家是否聽過'膩子腳本'這一概念,就是一些第三方腳本或工具被碗,作用類似于補丁某宪,用于兼容一些新特性或功能,在一般情況下蛮放,這些腳本或工具只需要自執(zhí)行缩抡,并且通常都是在我們的業(yè)務(wù)代碼之前引入

導(dǎo)出

ES6模塊的導(dǎo)出方式大致有兩種:命名導(dǎo)出、默認導(dǎo)出包颁;對比模塊的導(dǎo)入規(guī)則,導(dǎo)出要簡單一些压真,下面我們還是通過場景來介紹

場景1:源模塊怎樣才能支持命名導(dǎo)入和命名空間導(dǎo)入娩嚼?

// a.js
// 方式1:在源模塊末尾集中導(dǎo)出(當導(dǎo)出較多時,推薦此方式滴肿,方便管理導(dǎo)出)
var num = 100
var name = '王小明'
var flag = true

export {
    num,
    name,
    flag
}

// 方式2:聲明時立即導(dǎo)出(當導(dǎo)出較少時岳悟,推薦此方式)
export var num = 100
export var name = '王小明'
export var flag = true

場景2:導(dǎo)出的內(nèi)容前后名稱需要不一致,那么我們可以嘗試重命名

什么意思呢?如果源模塊的開發(fā)者有下面這種想法時贵少,就應(yīng)該使用重命名導(dǎo)出:‘我想要提高代碼的可讀性且有較好的語義化呵俏,此時變量或方法的名稱長度一定不會太短,類似getOrderInfoFromDatabaseByHttp這種命名滔灶,但又不想讓使用我的模塊的人覺得我的導(dǎo)出名稱過長’普碎,示例如下:

// a.js
// 名稱真的好長
var getOrderInfoFromDatabaseByHttp = function () {
    // ...
}

export {
    // 如果沒有重命名,機會導(dǎo)出下面這一大串
    // getOrderInfoFromDatabaseByHttp
    // 但如果使用了重命名录平,方法的名稱就會變得很簡潔麻车,即getOrderInfo
    getOrderInfoFromDatabaseByHttp as getOrderInfo
}

場景3:模塊功能單一,并且只需要導(dǎo)出值斗这,不需要具名

// version.js
export default 'v1.0.0'

// index.js
import version from './version.js'

上面的代碼功能很簡單动猬,只是導(dǎo)出項目的版本號,所以我們應(yīng)該使用默認導(dǎo)出表箭,而沒有必要像下面這樣寫:

// version.js
export var version =  'v1.0.0'

// index.js
import {version} from './version.js'

結(jié)語

以上就是ES6模塊的一些導(dǎo)入導(dǎo)出場景的整理赁咙,內(nèi)容不多,但卻很實用免钻,希望能夠?qū)Υ蠹矣兴鶐椭鷡

原文地址:https://kittyslave.github.io/2017/10/16/%E4%BD%A0%E7%9C%9F%E7%9A%84%E6%90%9E%E6%87%82ES6%E6%A8%A1%E5%9D%97%E7%9A%84%E5%AF%BC%E5%85%A5%E5%AF%BC%E5%87%BA%E8%A7%84%E5%88%99%E4%BA%86%E5%90%97/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末序目,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子伯襟,更是在濱河造成了極大的恐慌猿涨,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姆怪,死亡現(xiàn)場離奇詭異叛赚,居然都是意外死亡,警方通過查閱死者的電腦和手機稽揭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門俺附,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人溪掀,你說我怎么就攤上這事事镣。” “怎么了揪胃?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵璃哟,是天一觀的道長。 經(jīng)常有香客問我喊递,道長随闪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任骚勘,我火速辦了婚禮铐伴,結(jié)果婚禮上撮奏,老公的妹妹穿的比我還像新娘。我一直安慰自己当宴,他們只是感情好畜吊,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著户矢,像睡著了一般玲献。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逗嫡,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天青自,我揣著相機與錄音,去河邊找鬼驱证。 笑死延窜,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的抹锄。 我是一名探鬼主播逆瑞,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼伙单!你這毒婦竟也來了获高?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤吻育,失蹤者是張志新(化名)和其女友劉穎念秧,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體布疼,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡摊趾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了游两。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砾层。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖贱案,靈堂內(nèi)的尸體忽然破棺而出肛炮,到底是詐尸還是另有隱情,我是刑警寧澤宝踪,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布侨糟,位于F島的核電站,受9級特大地震影響肴沫,放射性物質(zhì)發(fā)生泄漏粟害。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一颤芬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦站蝠、人聲如沸汰具。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽留荔。三九已至,卻和暖如春澜倦,著一層夾襖步出監(jiān)牢的瞬間聚蝶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工藻治, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留碘勉,地道東北人。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓桩卵,卻偏偏與公主長得像验靡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子雏节,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

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