es6的模塊系統(tǒng)

js引擎運(yùn)行模塊時(shí):

  1. 語(yǔ)法解析: 閱讀模塊源代碼,檢查語(yǔ)法錯(cuò)誤;
  2. 加載: 遞歸的加載所有被導(dǎo)入的模塊(深度優(yōu)先遍歷),這一部分未被標(biāo)準(zhǔn)化.
  3. 連接: 每遇到一個(gè)新加載的模塊,為其創(chuàng)建作用域并將模塊內(nèi)聲明的所有綁定填充到該作用域中,包括由其他模塊導(dǎo)入的內(nèi)容;
  4. 運(yùn)行時(shí): 最終,在每一個(gè)新加載的模塊體內(nèi)執(zhí)行所有語(yǔ)句, 導(dǎo)入過(guò)程結(jié)束.

系統(tǒng)不指定加載過(guò)程的實(shí)現(xiàn)方式

你可以通過(guò)在源代碼中查找import聲明提前計(jì)算出所有依賴,你可以將ES6系統(tǒng)實(shí)現(xiàn)為:
在編譯時(shí)計(jì)算所有依賴并將所有模塊打包成一個(gè)文件,通過(guò)網(wǎng)絡(luò)一次傳輸所有模塊!像webpack這樣的工具就實(shí)現(xiàn)了這個(gè)功能。

為什么這樣做?

因?yàn)橥ㄟ^(guò)網(wǎng)絡(luò)加載腳本需要花費(fèi)時(shí)間,每當(dāng)你請(qǐng)求到一個(gè)模塊,你可能發(fā)現(xiàn)它里面也包含著import聲明,這就需要你再花費(fèi)一些時(shí)間加載更多的腳本。這會(huì)消耗更多的網(wǎng)絡(luò)往返時(shí)間

靜態(tài)的模塊系統(tǒng)

  • 只可以在模塊的最外層作用域使用import, export,不可以在條件語(yǔ)句中使用,也不能在函數(shù)作用域中使用import.
  • 所有到處的標(biāo)識(shí)符一定要在源代碼中明確地導(dǎo)出它們的名稱,你不能通過(guò)編寫(xiě)代碼遍歷一個(gè)數(shù)組然后用數(shù)據(jù)驅(qū)動(dòng)的方式導(dǎo)出一堆名稱.
  • 模塊對(duì)象唄凍結(jié)了,無(wú)法hack模塊對(duì)象并為其添加polyfill風(fēng)格的新特性.
  • 一個(gè)模塊的所有依賴必須在模塊代碼運(yùn)行前完全加載,解析并且及早連接,不存在一種通過(guò)import來(lái)按需懶加載的語(yǔ)法.
  • import模塊產(chǎn)生的錯(cuò)誤沒(méi)有錯(cuò)誤恢復(fù)機(jī)制,一旦一個(gè)模塊加載出錯(cuò),所有的模塊都不會(huì)運(yùn)行.無(wú)法用try/catch 來(lái)捕獲錯(cuò)誤.
  • 不支持在模塊加載依賴前運(yùn)行其它代碼的鉤子,這意味著無(wú)法控制模塊的依賴加載過(guò)程.

額外的動(dòng)態(tài)編程加載器API------"動(dòng)態(tài)",打破上面列舉的規(guī)則

webpack引入了代碼分割A(yù)PI來(lái)實(shí)現(xiàn)按需加載

" ES6模塊語(yǔ)法非常靜態(tài),這是很好的——它通過(guò)強(qiáng)有力的編譯時(shí)工具的形式進(jìn)行彌補(bǔ)。但是設(shè)計(jì)靜態(tài)語(yǔ)法的初衷是要與豐富的動(dòng)態(tài)編程加載器API一起增強(qiáng)ES6的模塊系統(tǒng)。"

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持,譯者再次奉上一點(diǎn)點(diǎn)福利:阿里云產(chǎn)品券,享受所有官網(wǎng)優(yōu)惠,并抽取幸運(yùn)大...
    HetfieldJoe閱讀 3,668評(píng)論 2 27
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,869評(píng)論 18 139
  • 第十三章 用模塊封裝代碼 模塊是自動(dòng)運(yùn)行在嚴(yán)格模式下并且沒(méi)有辦法退出運(yùn)行的JavaScript代碼,在模塊頂部創(chuàng)建...
    NowhereToRun閱讀 285評(píng)論 0 1
  • 影子躺在潔白的手術(shù)臺(tái)上,無(wú)情的各種手術(shù)刀擺在眼前,心中很不安,接著冰冷的的金屬的在身體里無(wú)情的攪動(dòng),影子的臉色頓時(shí)...
    無(wú)盡無(wú)盡夏閱讀 196評(píng)論 0 0
  • 這段時(shí)間寫(xiě)日記是兩天打漁三天曬網(wǎng),一是確實(shí)比較忙,家里瑣碎的事兒特別多,忙到晚上就不想動(dòng)彈了。二是到了晚上面對(duì)女兒...
    勿忘我瑤閱讀 126評(píng)論 4 3