首頁(yè)技術(shù)文章正文

什么是ES6模塊化規(guī)范?怎樣導(dǎo)入導(dǎo)出模塊?

更新時(shí)間:2021-10-07 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班


在 ES6 模塊化規(guī)范誕生之前,JavaScript 社區(qū)已經(jīng)嘗試并提出了 AMD、CMD、CommonJS 等模塊化規(guī)范。但是,這些由社區(qū)提出的模塊化標(biāo)準(zhǔn),還是存在一定的差異性與局限性、并不是瀏覽器與服務(wù)器通用的模塊化標(biāo)準(zhǔn),例如:

①AMD 和 CMD 適用于瀏覽器端的 Javascript 模塊化

②CommonJS 適用于服務(wù)器端的 Javascript 模塊化

太多的模塊化規(guī)范給開發(fā)者增加了學(xué)習(xí)的難度與開發(fā)的成本。因此,大一統(tǒng)的 ES6 模塊化規(guī)范誕生了!

ES6 模塊化規(guī)范是瀏覽器端與服務(wù)器端通用的模塊化開發(fā)規(guī)范。它的出現(xiàn)極大的降低了前端開發(fā)者的模塊化學(xué)習(xí)成本,開發(fā)者不需再額外學(xué)習(xí) AMD、CMD 或 CommonJS 等模塊化規(guī)范。

ES6 模塊化規(guī)范中每個(gè) js 文件都是一個(gè)獨(dú)立的模塊,導(dǎo)入其它模塊成員需要使用 import 關(guān)鍵字,向外共享模塊成員使用 export 關(guān)鍵字。

在node.js中我們可以體驗(yàn)ES6模塊化:

node.js 中默認(rèn)僅支持 CommonJS 模塊化規(guī)范,若想基于node.js 體驗(yàn)與學(xué)習(xí) ES6 的模塊化語(yǔ)法,可以按照如下兩個(gè)步驟進(jìn)行配置:

① 確保安裝了 v14.15.1 或更高版本的 node.js

② 在 package.json 的根節(jié)點(diǎn)中添加 "type": "module" 節(jié)點(diǎn)

默認(rèn)導(dǎo)出的語(yǔ)法: export default 默認(rèn)導(dǎo)出的成員,導(dǎo)出語(yǔ)法如以下文件所示:

letn1=10//定義模塊私有成員n1
let n2 = 20 //定義模塊私有成員n2 (外界訪問不到n2, 因?yàn)樗鼪]有被共享出去)
function show() {} //定義模塊私有方法show
[]
export default { //使用export default 默認(rèn)導(dǎo)出語(yǔ)法,向外共享n1和show 兩個(gè)成員
n1,
show
}

默認(rèn)導(dǎo)入的語(yǔ)法: import 接收名稱 from '模塊標(biāo)識(shí)符',導(dǎo)入語(yǔ)法如以下文件所示:

//從01_ _m1.js 模塊中導(dǎo)入export default 向外共享的成員
//并使用m1成員進(jìn)行接收
import m1 from ' ./01_ m1.js'

//打印輸出的結(jié)果為:
//{n1:10,show: [Function: show] }
console. log(m1 )


注意事項(xiàng):
在默認(rèn)導(dǎo)出中每個(gè)模塊,只允許使用唯一的一次 export default,否則會(huì)報(bào)錯(cuò)!示例代碼如下以下文件:

letn1=10//定義模塊私有成員n1
let n2 = 20 //定義模塊私有成員n2 (外界訪問不到n2,因?yàn)樗鼪]有被共享出去)
function show() {} /1定義模塊私有方法show

export default { //使用export default 默認(rèn)導(dǎo)出語(yǔ)法,向外共享n1和show 兩個(gè)成員
n1,
show
}
// SyntaxError: Identifier ' .default' has already been declared 
export default {
n2
}

默認(rèn)導(dǎo)入時(shí)的接收名稱可以任意名稱,只要是合法的成員名稱即可,示例代碼如下:

// m1是合法的名稱
// import m1 from './01_ m1.js '

// 123m 不是合法的名稱,因?yàn)槌蓡T名稱不能以數(shù)字開頭
import 123m from ' ./01 m1.js '


按需導(dǎo)出的語(yǔ)法: export 按需導(dǎo)出的成員,導(dǎo)出語(yǔ)法如以下文件所示:

 //當(dāng)前模塊為03_ m2.js

 //向外按需導(dǎo)出變量s1
exportlets1='aaa
 //向外按需導(dǎo)出變量s2
 export let s2 = 'CCC '
 //向外按需導(dǎo)出方法say
 export function say() {}

按需導(dǎo)入的語(yǔ)法: import { s1 } from '模塊標(biāo)識(shí)符',導(dǎo)入語(yǔ)法如以下文件所示:

//導(dǎo)入模塊成員
import { s1, s2, say } from ' ./03_ m2.js '

console.log(s1) //打印輸出aaa
console. log(s2) // 打印輸出CCC
console.log(say) //打印輸出[Function: say]


按需導(dǎo)出與按需導(dǎo)入的注意事項(xiàng):

①每個(gè)模塊中可以使用多次按需導(dǎo)出

②按需導(dǎo)入的成員名稱必須和按需導(dǎo)出的名稱保持一致

③按需導(dǎo)入時(shí),可以使用 as 關(guān)鍵字進(jìn)行重命名

④按需導(dǎo)入可以和默認(rèn)導(dǎo)入一起使用
如果只想單純地執(zhí)行某個(gè)模塊中的代碼,并不需要得到模塊中向外共享的成員。此時(shí),可以直接導(dǎo)入并執(zhí)行模塊代碼,示例代碼如下:

//當(dāng)前文件模塊為05_ m3.js

//在當(dāng)前模塊中執(zhí)行一個(gè) for 循環(huán)操作
for(let i=0; i<3; i++) {
  console.log(i)
}

//-----------------分割線-----------------

//直接導(dǎo)入并執(zhí)行模塊代碼,不需要得到模塊向外共享的成員

import ' ./05_ m3.js'






猜你喜歡:

網(wǎng)頁(yè)模塊命名需要遵循哪些原則?【前端技術(shù)文章】

開發(fā)動(dòng)態(tài)網(wǎng)站模塊常用的技術(shù)有哪些?

如何下載和安裝第三方模塊?

JavaScript中l(wèi)et和var和const有什么區(qū)別?

黑馬程序員前端與移動(dòng)開發(fā)培訓(xùn)

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!