更新時間:2021-10-07 來源:黑馬程序員 瀏覽量:
在 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ī)范中每個 js 文件都是一個獨立的模塊,導(dǎo)入其它模塊成員需要使用 import 關(guān)鍵字,向外共享模塊成員使用 export 關(guān)鍵字。
在node.js中我們可以體驗ES6模塊化:
node.js 中默認(rèn)僅支持 CommonJS 模塊化規(guī)范,若想基于node.js 體驗與學(xué)習(xí) ES6 的模塊化語法,可以按照如下兩個步驟進行配置:
① 確保安裝了 v14.15.1 或更高版本的 node.js
② 在 package.json 的根節(jié)點中添加 "type": "module" 節(jié)點
默認(rèn)導(dǎo)出的語法: export default 默認(rèn)導(dǎo)出的成員,導(dǎo)出語法如以下文件所示:
letn1=10//定義模塊私有成員n1 let n2 = 20 //定義模塊私有成員n2 (外界訪問不到n2, 因為它沒有被共享出去) function show() {} //定義模塊私有方法show [] export default { //使用export default 默認(rèn)導(dǎo)出語法,向外共享n1和show 兩個成員 n1, show }
默認(rèn)導(dǎo)入的語法: import 接收名稱 from '模塊標(biāo)識符',導(dǎo)入語法如以下文件所示:
//從01_ _m1.js 模塊中導(dǎo)入export default 向外共享的成員 //并使用m1成員進行接收 import m1 from ' ./01_ m1.js' //打印輸出的結(jié)果為: //{n1:10,show: [Function: show] } console. log(m1 )
注意事項:
在默認(rèn)導(dǎo)出中每個模塊,只允許使用唯一的一次 export default,否則會報錯!示例代碼如下以下文件:
letn1=10//定義模塊私有成員n1 let n2 = 20 //定義模塊私有成員n2 (外界訪問不到n2,因為它沒有被共享出去) function show() {} /1定義模塊私有方法show export default { //使用export default 默認(rèn)導(dǎo)出語法,向外共享n1和show 兩個成員 n1, show } // SyntaxError: Identifier ' .default' has already been declared export default { n2 }
默認(rèn)導(dǎo)入時的接收名稱可以任意名稱,只要是合法的成員名稱即可,示例代碼如下:
// m1是合法的名稱 // import m1 from './01_ m1.js ' // 123m 不是合法的名稱,因為成員名稱不能以數(shù)字開頭 import 123m from ' ./01 m1.js '
按需導(dǎo)出的語法: export 按需導(dǎo)出的成員,導(dǎo)出語法如以下文件所示:
//當(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)入的語法: import { s1 } from '模塊標(biāo)識符',導(dǎo)入語法如以下文件所示:
//導(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)入的注意事項:
①每個模塊中可以使用多次按需導(dǎo)出
②按需導(dǎo)入的成員名稱必須和按需導(dǎo)出的名稱保持一致
③按需導(dǎo)入時,可以使用 as 關(guān)鍵字進行重命名
④按需導(dǎo)入可以和默認(rèn)導(dǎo)入一起使用
如果只想單純地執(zhí)行某個模塊中的代碼,并不需要得到模塊中向外共享的成員。此時,可以直接導(dǎo)入并執(zhí)行模塊代碼,示例代碼如下:
//當(dāng)前文件模塊為05_ m3.js //在當(dāng)前模塊中執(zhí)行一個 for 循環(huán)操作 for(let i=0; i<3; i++) { console.log(i) } //-----------------分割線----------------- //直接導(dǎo)入并執(zhí)行模塊代碼,不需要得到模塊向外共享的成員 import ' ./05_ m3.js'
猜你喜歡:
網(wǎng)頁模塊命名需要遵循哪些原則?【前端技術(shù)文章】
開發(fā)動態(tài)網(wǎng)站模塊常用的技術(shù)有哪些?