https://juejin.im/post/6844903978333896718
https://segmentfault.com/a/1190000020093455
https://zhuanlan.zhihu.com/p/54290649
UMD 版本可以通過 <script>
標簽直接用在瀏覽器中。jsDelivr CDN 的
ESM 格式被設計為可以被靜態分析,所以打包工具可以利用這一點來進行“tree-shaking”並將用不到的代碼排除出最終的包
現代瀏覽器中通過 <script type="module">
直接導入
歷史上,js一直沒有模塊(module)體系,無法將一個項目拆分成多個模塊文件。正對這一情況,社區出現了一些統一的規范:CommonJs和AMD,前者是針對服務端的js,也就是nodejs。后者是針對瀏覽器的
以前的js不能引入三方模塊,所有的代碼必須寫到一個文件中,導致單個文件代碼量大、業務功能模塊不清晰、難於維護。而編寫模塊化代碼,有助於使您的代碼變得松散耦合,這對於構建可維護的表示工程代碼大有幫助。基於此,越來越多的模塊規范出現,如commonjs、amd、umd、esm
一些類庫均有lib
,es
文件夾用來表示commonjs
寫法和es6
寫法,我們可以用babel
直接轉碼生成.
AMD一開始是CommonJS規范中的一個草案,全稱是Asynchronous Module Definition,即異步模塊加載機制。后來由該草案的作者以RequireJS實現了AMD規范,所以一般說AMD也是指RequireJS
CMD是SeaJS在推廣過程中生產的對模塊定義的規范
CommonJS規范為CommonJS小組所提出,目的是彌補JavaScript在服務器端缺少模塊化機制,NodeJS、webpack都是基於該規范來實現的。
ES6 Module是ES6中規定的模塊體系,相比上面提到的規范, ES6 Module有更多的優勢,有望成為瀏覽器和服務器通用的模塊解決方案。
umd
其是amd和commonjs的統一規范,支持兩種規范,即寫一套代碼,可用於多種場景
ESM
ESM是ES6提出的標准模塊系統,相信大家都用過
node支持ESModule
//node最新版本進一步增強了對ESModule的支出,只需要在package.json增加一個選項即可 "type":"module"