精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

混亂是進步的階梯 — ESM規范的崛起【上】

開發 前端
在無數開源大神的努力下,很多前端開發的痛點(比如「靜態類型檢查」、「瀏覽器兼容性」)早已有了事實上的標準解決方案(比如TS、babel)。

[[395172]]

 前言

前端發展到如今,社區生態已經非常豐富。

在無數開源大神的努力下,很多前端開發的痛點(比如「靜態類型檢查」、「瀏覽器兼容性」)早已有了事實上的標準解決方案(比如TS、babel)。

然而,在這繁榮之下,有一個日常開發不易感知的問題:

  • 模塊化規范的混亂

你可曾遇到過莫名其妙的bug,在多方搜資源,反復驗證,耗費數個小時終于發現:

原來是某個包導出的是CJS,而項目使用ESM導致。

比如這個例子:記一次打包壓縮報錯[1]

如果你覺得這是個很容易發現的問題,再考慮結合上node_modules的層層依賴呢?

這個問題,揭開了模塊化規范間斗爭與博弈的冰山一角。

作為現代前端工程化的基石,模塊化規范有太多值得深究的內容。

我會花幾篇文章來講解模塊化規范。本文是第一篇,會圍繞模塊化規范的演進展開。

正文

如果問十年前的前端最頭疼的是什么?一定是瀏覽器兼容性。

隨著babel等編譯工具出現,兼容性逐漸被工程化方案解決(ES6+編譯為ES5)。

不僅是「兼容性」問題,DSL(如JSX、VUE的模版語法)、代碼壓縮、代碼靜態檢查(TS)等日常開發的剛需都能在工程化方案中找到解決辦法。

如果將當今繁榮的前端工程化生態比喻為一座大廈,那大廈的地基一定是「模塊化規范」。

現代JS代碼都是基于「模塊化規范」組織起來,讓我們從下往上來看看這座大廈:

規范的實現依賴于宿主環境,比如瀏覽器環境實現了EcmaScript Module(后文簡稱ESM)規范。

Node v12之前支持CommonJS(后文簡稱CJS)規范,12之后同時支持CJS與ESM。

在「宿主環境」之上,是基于模塊化規范實現的「工具集」,比如webpack、vite、VScode生態。

再往上,基于「工具集」提供的API,可以實現各種工程化工具。比如:

  • webpack loader
  • VScode plugin
  • babel plugin

再往上,就是開發者自己編寫的業務代碼。

開發者只需要在工具集中配置好工具,就能為業務代碼提供服務。比如:

在VScode(工具集)中配置eslint(工具),就能在開發時獲得相應提示

在webpack(工具集)中配置babel loader(工具),就能在開發時使用ES6+語法

可見,理想狀態下,在開發者視角是不需要關注底層的「模塊化規范」實現的。

規范之爭

然而,事物是動態發展的,模塊化規范也不是一蹴而就的,讓我們回到09年。

美國程序員「Ryan Dahl」創造了node.js項目,將JS用于服務端開發。

[[395174]]

node.js使用CJS[2]標準作為模塊化規范。

[[395175]]

有了服務端模塊規范(CJS),很自然的,JS開發者們想為客戶端(主要是瀏覽器)提供一種模塊化規范。

然而CJS是為服務端設計的。

在服務端,IO操作通常能迅速完成,所以CJS規范定義的:

  • 模塊加載 --> 模塊解析 --> 模塊執行

這個流程是作為一個整體同步執行的。

然而在瀏覽器環境,「模塊加載」(即數據請求)通常很耗時。有人曾作出一個形象的比喻:

如果一個CPU周期花費1秒完成,那么文件的網絡請求需要花費4年。


顯然瀏覽器端需要一種「支持異步」的模塊化規范。

AMD(Asynchronous Module Definition 異步模塊定義)規范,就是這樣需求背景下的產物。

然而這些社區提出的規范終究只是為了解決一時的需求,隨著歷史的發展,新的模塊化規范不斷涌入、消亡。

直到ESM規范被提出。

ESM規范是ES標準的模塊化規范,他的早期討論可以追溯到2009年。

你可以在這里看到ESM規范的歷史es-module-history[3]

ESM將模塊規范分為三個階段:

  • 模塊加載 --> 模塊實例化 --> 模塊執行

其中「模塊加載」由宿主環境提供的loader完成(比如在瀏覽器環境,loader的行為由HTML規范[4]定義)。

「模塊實例化」與「模塊執行」由ESM規范定義執行流程。

區別于CJS規范的同步執行,ESM規范將流程拆解為3個獨立階段。

「模塊加載」同步、異步與否由宿主環境決定。

支持不同宿主環境,抹平多端差異、能力比其他規范都強大(后文會介紹)、再加上血統純正(ES官方提出),

使得ESM規范一統前端「看似」指日可待。

然而,此時社區已經有大量基于CJS規范產出的開源包、組件,他們無法立刻切換到ESM規范。

所以,JS生態的現狀是:會處于、并將長期處于CJS規范的庫與ESM規范的庫共存的狀態。

但是最終,ESM規范一定會成為主導,畢竟他的優點太多(同樣,后文會介紹)。

規范割裂帶來的機會

[[395176]]

當前模塊化規范的混亂,對開源大佬們來說,就是機會。

為了讓開發者將更多精力放在業務,而不是模塊規范的適配上。

很多開源「工具集」都試圖抹平模塊化差異,比如:

  • 在babel中使用babel-plugin-transform-commonjs可以將CJS規范的代碼轉換為ESM規范
  • 為了一刀切解決當前ESM、CJS、瀏覽器script標簽導入這3種規范互相不兼容的情況,提出了兼容三者格式的UMD(Universal Module Definition)規范

一些「工具集」利用模塊化規范的不同與其他競品形成差異化競爭,比如:

  • browserify這款打包工具的賣點是:使用CJS規范打包,使一份代碼同時在Node環境與瀏覽器環境(打包后)執行。
[[395177]]

其中,在瀏覽器環境中,Node的一些核心庫(如events、stream、path...)會被打包成瀏覽器支持的版本。

  • Vite在DEV環境使用ESM規范構建模塊間的依賴關系。

依賴于大部分現代瀏覽器原生支持ESM規范,省去了打包的過程,使其編譯速度大大提升。

  • rollup原生對ESM提供更多支持。

嚴格支持ESM規范,并提供更好的靜態分析,使rollup一度提供性能更優異的treeShaking能力。

成為更多庫打包工具的首選。

與webpack這樣的的大而全方案形成差異競爭。

規范割裂帶來的痛

可以看到,由于底層宿主環境對模塊化規范支持的割裂,需要上層工具集來抹平模塊規范的差異。

設想一個同時使用了webpack、babel、TS的項目。

這3個工具集都對多種模塊規范有兼容處理。比如:

單獨使用babel時,對于如下代碼:

  1. import a from 'lib'
  2. console.log(a); 

會被babel編譯為:

  1. "use strict"
  2.  
  3. var _lib = _interopRequireDefault(require("lib")); 
  4.  
  5. function _interopRequireDefault(obj) { 
  6.   return obj && obj.__esModule ? obj : { default: obj }; 
  7.  
  8. console.log(_lib.default); 

ESM的「默認導出」會被編譯為包含default屬性的對象。

你可以打開babel playground[5]試試

當多個「工具集」在同一個項目中,為了各自目的做著同一件事(抹平模塊化規范差異),

一旦工具鏈中某個插件配置有一絲絲不符合預期,或者引入了一個不符合預期的包,那么艱難的debug就此開始了......

[[395178]]

曙光即使當前有諸多不便,歷史的進程是無法阻止的,那些被歷史巨輪甩下并碾碎的模塊化規范,會逐漸消失在開發者的視野中。

[[395179]]

而贏家注定會通吃。

為什么ESM注定會成為最大贏家?他有什么無法比擬的優勢?我們會在下篇文章揭曉。

參考資料

[1]記一次打包壓縮報錯:

https://cloud.tencent.com/developer/article/1650627

[2]CJS:

http://wiki.commonjs.org/wiki/Modules/1.1

[3]es-module-history:

https://gist.github.com/jkrems/769a8cd8806f7f57903b641c74b5f08a

[4]HTML規范:

https://html.spec.whatwg.org/#fetch-a-module-script-tree

[5]babel playground:

https://babeljs.io/repl

 

責任編輯:姜華 來源: 魔術師卡頌
相關推薦

2013-07-10 10:07:51

編碼規范編碼

2013-07-10 09:58:14

編碼規范

2011-12-29 13:31:51

虛擬化

2025-10-28 02:22:00

2020-09-22 11:25:49

機器人人工智能系統

2021-02-24 13:53:59

智慧城市智能城市化

2019-08-16 22:07:28

ACC自動駕駛巡航功能

2012-06-18 15:09:04

Linux游戲

2012-10-08 09:25:59

GoGo語言開發語言

2011-07-15 14:12:30

Silverlight

2023-07-20 16:15:59

光纖電纜

2021-07-05 16:10:35

JavaScript代碼前端

2013-01-22 10:32:13

2017-11-09 20:40:00

大數據大數據安全隱私數據

2023-11-03 18:53:19

2015-11-03 14:58:16

CDO首席數據官

2023-12-09 14:33:05

2017-04-27 20:45:51

人工智能霍金人類文明

2013-08-28 17:50:48

樂視互聯網電視
點贊
收藏

51CTO技術棧公眾號

久久香蕉国产| 日韩成人在线电影| 国产三级精品视频| 91久久国产婷婷一区二区| 91传媒免费观看| 亚洲不卡在线| 在线观看av一区二区| 黄色网zhan| 日本一区视频| 极品少妇xxxx精品少妇偷拍| 久久久天堂国产精品女人| av网站免费在线播放| 疯狂欧洲av久久成人av电影| 亚洲一区二三区| 日韩高清av| 粉嫩小泬无遮挡久久久久久| 久久中文精品| 久久久亚洲国产| 情侣偷拍对白清晰饥渴难耐| 久久亚州av| 欧美一三区三区四区免费在线看 | 午夜精品久久久久久久99水蜜桃 | 91网在线免费观看| 亚洲熟女综合色一区二区三区| 久久国产中文字幕| 亚洲精品在线看| 91成人在线观看喷潮蘑菇| 777午夜精品电影免费看| 亚洲高清免费视频| 四虎影院一区二区| 国产高清在线观看| 91麻豆福利精品推荐| 51成人做爰www免费看网站| 免费观看日批视频| 亚洲视频www| 欧美激情18p| 三级黄色免费观看| 成人婷婷网色偷偷亚洲男人的天堂| 精品成人一区二区三区| 成人黄色一级大片| h1515四虎成人| 在线视频综合导航| 欧美日本视频在线观看| 免费男女羞羞的视频网站在线观看 | 99久久www免费| 一本久久综合亚洲鲁鲁| 欧美 日本 国产| 日韩成人动漫在线观看| 亚洲福利视频专区| 逼特逼视频在线观看| 亚洲一级大片| 精品国产一二三区| 丰满人妻一区二区三区免费视频棣 | 中文无码久久精品| 中文国产亚洲喷潮| 国产主播av在线| 日本精品黄色| 色多多国产成人永久免费网站| 五月天综合视频| 红桃成人av在线播放| 国产亚洲人成网站在线观看| 日韩人妻无码精品综合区| 国产欧美日韩在线观看视频| 亚洲视频视频在线| 国产调教在线观看| 91视频久久| 欧美精品免费看| 免费在线观看国产精品| 在线成人黄色| 欧美一区第一页| 最近中文字幕在线免费观看| 久久精品二区亚洲w码| 91在线精品播放| 国产综合视频在线| 成人av片在线观看| 久久国产精品久久精品国产| 久久电影视频| 综合色天天鬼久久鬼色| 久久久无码中文字幕久...| 欧美黑人猛交的在线视频| 亚洲成a人片综合在线| 国产精品无码av在线播放| 欧亚一区二区| 日韩三级视频在线看| 少妇精品无码一区二区三区| 精品福利久久久| 久久视频在线看| 日本特黄特色aaa大片免费| 国产午夜久久| 国产精品一区二区在线| 国产高清在线观看视频| 波多野结衣中文一区| 色爱区成人综合网| 羞羞网站在线免费观看| 一本久道久久综合中文字幕| 亚洲欧美日韩三级| 精品资源在线| 精品国产一区二区三区久久狼黑人| 青青草原免费观看| 日韩国产欧美一区二区三区| 亚洲一区二区三区四区视频| 日韩成人黄色| 亚洲在线观看免费| 超碰在线97免费| 美国十次av导航亚洲入口| 中文字幕av一区中文字幕天堂| 久久久久亚洲av片无码下载蜜桃 | 亚洲午夜在线电影| 黄色在线视频网| 精品视频高潮| 爱福利视频一区| 亚洲影院在线播放| 国产成人精品网址| 色大师av一区二区三区| 大香伊人中文字幕精品| 欧美日韩在线免费视频| 亚洲一级av无码毛片精品| 国产韩国精品一区二区三区| 欧美一区第一页| 亚洲大尺度网站| 中文字幕制服丝袜一区二区三区 | 国内精品国产三级国产a久久| 精品乱码一区| 男女在线观看视频| 日韩视频免费直播| 亚洲少妇xxx| 日韩精品乱码免费| 久久国产主播精品| 久久久123| 91精品国产欧美一区二区18| 日本美女xxx| 老**午夜毛片一区二区三区| 国产综合动作在线观看| 欧美男男video| 日韩欧美第一区| 国产一区二区视频在线观看免费| 免费成人美女在线观看.| 欧美日韩无遮挡| 欧美成人ⅴideosxxxxx| 日韩精品一二三四区| 国产系列精品av| 成人免费视频一区| 亚洲 欧美 综合 另类 中字| 久久99精品久久久野外观看| 日韩在线视频导航| 一本大道伊人av久久综合| 国产三级精品视频| www.精品在线| 999国产精品999久久久久久| 国产日韩专区在线| 婷婷在线视频| 欧美丰满高潮xxxx喷水动漫| 国产小视频你懂的| 精品亚洲porn| 国产911在线观看| 6080成人| 91产国在线观看动作片喷水| 91精品久久久久久蜜桃| 少妇被狂c下部羞羞漫画| 国产精品v亚洲精品v日韩精品| 亚洲一区中文字幕| a视频在线免费看| 欧美成人综合网站| 福利一区二区三区四区| eeuss影院一区二区三区 | www久久日com| 精品噜噜噜噜久久久久久久久试看 | 国a精品视频大全| 亚洲欧美日本在线观看| 色哟哟一区二区三区| 中文字幕有码在线播放| 另类小说综合欧美亚洲| 在线观看三级网站| 国产区精品视频在线观看豆花| 91wwwcom在线观看| 懂色一区二区三区| 欧美一区二区成人| 日韩高清精品免费观看| 久久精品视频在线免费观看| 特级丰满少妇一级| 91精品99| 欧美国产视频在线观看| 日本一区二区中文字幕| 欧美激情网站在线观看| 欧美zozo| 欧美一区二区三区性视频| 日韩免费不卡视频| 欧美—级在线免费片| 女同性αv亚洲女同志| 久久久777| 国产精品8888| 奇米亚洲欧美| 91亚洲精品久久久久久久久久久久| 91九色在线看| xvideos成人免费中文版| 亚洲第一天堂影院| 欧洲一区二区三区在线| 国产亚洲欧美精品久久久www| 久久久一区二区| 国产成人av免费观看| 美女91精品| 国产精品啪啪啪视频| 欧美日韩有码| 国产九色91| 成人免费91| 日韩av高清不卡| 美女日批视频在线观看| 在线观看欧美视频| 无码国产伦一区二区三区视频 | 少妇高潮一69aⅹ| 日韩高清不卡一区二区三区| 日韩一级性生活片| 国产精品videosex性欧美| 久久精彩视频| www.久久东京| 91精品视频播放| 婷婷综合六月| 羞羞色国产精品| 色呦呦呦在线观看| 精品精品国产国产自在线| 国内在线精品| 精品一区电影国产| 日韩中文字幕免费观看| 欧美一区二区三区四区视频| 伊人久久一区二区| 91久久线看在观草草青青| 日本熟妇成熟毛茸茸| 一区二区免费在线| 亚洲一级生活片| 国产精品久久久久久久久久久免费看| 成年人在线观看av| 99久久久无码国产精品| 日本一区二区免费视频| 国产精品影音先锋| 天天色天天综合网| 久久99蜜桃精品| 一区二区xxx| 免费人成网站在线观看欧美高清| 国产欧美高清在线| 鲁大师成人一区二区三区| 成人在线免费在线观看| 一区二区三区成人精品| 男女超爽视频免费播放| 亚洲伦理一区| 黄色一级片播放| 性色av一区二区怡红| 久草青青在线观看| 蜜乳av另类精品一区二区| 麻豆av免费在线| 日本亚洲最大的色成网站www| 成人在线观看a| 日日摸夜夜添夜夜添精品视频| 老司机午夜av| 日韩二区在线观看| 一区二区xxx| 九九**精品视频免费播放| 国产欧美一区二| 国产激情偷乱视频一区二区三区 | 综合久久中文字幕| 欧美亚一区二区| 91在线精品入口| 日韩一区二区三区在线观看| 亚洲成熟女性毛茸茸| 亚洲国产私拍精品国模在线观看| 欧美一级一区二区三区| 日韩av在线电影网| 国产理论电影在线观看| 色偷偷88888欧美精品久久久| 国产高清在线看| 久久成人一区二区| 超碰caoporn久久| 久久99久国产精品黄毛片入口| 欧美性爽视频| 日本乱人伦a精品| 日韩成人一区| 国产精品手机在线| 国产成人三级| 18视频在线观看娇喘| 亚洲青色在线| 午夜dv内射一区二区| 精彩视频一区二区三区| 欧美极品jizzhd欧美仙踪林| 91首页免费视频| 成人免费毛片xxx| 午夜天堂影视香蕉久久| 久久国产乱子伦精品| 欧美一区二区三区不卡| 视频污在线观看| 日韩在线观看免费全集电视剧网站| 成人在线免费看片| 欧美有码在线观看| 高清久久精品| 欧美日韩国产免费一区二区三区| 久久精品亚洲人成影院| 成年人视频观看| 国产一区欧美日韩| 中文字幕一区二区人妻在线不卡| 成人欧美一区二区三区1314| 久久久久久少妇| 日韩情涩欧美日韩视频| 久久精品蜜桃| 国模私拍一区二区三区| 欧洲精品久久久久毛片完整版| 国产一区二区免费在线观看| 色777狠狠狠综合伊人| 日韩精品xxxx| 国产一区欧美一区| 国产精品久久久久久久av| 亚洲成a人片综合在线| 国产农村老头老太视频| 亚洲天堂精品在线| 丁香花在线影院| 亚洲aⅴ男人的天堂在线观看| 美女久久99| 国产手机免费视频| 国产在线看一区| 女人黄色一级片| 疯狂做受xxxx高潮欧美日本| 国产jzjzjz丝袜老师水多| 国产一区二区精品丝袜| 末成年女av片一区二区下载| 91在线短视频| 88国产精品视频一区二区三区| 成人性做爰aaa片免费看不忠| 成人av午夜影院| 国产真人真事毛片| 日韩网站在线看片你懂的| 午夜毛片在线| 国产精品入口免费视| 免费看成人哺乳视频网站| 玩弄中年熟妇正在播放| 成人午夜免费电影| 欧美黄色一区二区三区| 欧美一区二区免费视频| 亚洲成人三级| 国产精品专区一| 色天天综合网| jizz欧美性11| 国产精品麻豆一区二区| 中文字幕欧美色图| 在线观看国产成人av片| 久久亚洲精品爱爱| 日本免费高清一区二区| 老司机午夜免费精品视频| 欧美激情aaa| 91国产精品成人| 黄色在线观看网| 国产精品黄页免费高清在线观看| 经典一区二区| 免费看国产黄色片| 国产精品久久午夜| 97人妻精品一区二区三区| 久久久国产精品免费| 精品视频在线观看免费观看| 久久最新免费视频| 国产超碰在线一区| 日韩av电影网址| 精品无码久久久久久国产| 超碰超碰人人人人精品| 日韩精品不卡| 激情成人综合网| 久久久久香蕉视频| 日韩av一区二区在线观看| 性国裸体高清亚洲| 色999日韩自偷自拍美女| 黑人巨大精品欧美黑白配亚洲| www青青草原| 精品一区精品二区| 日本成人在线网站| 国产在线观看欧美| 91色porny在线视频| 午夜久久久久久久久久影院| 中文字幕亚洲字幕| 一区二区日韩| 91蝌蚪视频在线观看| 亚洲视频每日更新| 色婷婷综合视频| 国产精品久久久久久久av电影| 亚洲啊v在线观看| 亚洲国产精品自拍视频| 欧美性一级生活| 女同视频在线观看| 欧美色图亚洲自拍| 狠狠色丁香久久婷婷综合丁香| 精品少妇久久久| 国产亚洲欧美另类中文| 亚洲综合网站| 无码无遮挡又大又爽又黄的视频| 国产精品福利一区二区三区| 成人免费视频国产| 国产91色在线免费| 国产中文一区| 国产精品成人在线视频| 精品久久人人做人人爱| 欧美日韩亚洲国产| 日韩小视频网站| 国产精品高潮呻吟| 每日更新av在线播放| 99re6热在线精品视频播放速度| 久久一区欧美|