[TOC]
# 模塊加載原理
[JS模塊加載器加載原理是怎么樣的?](https://www.zhihu.com/question/21157540)
[getCurrentScript的改進](http://www.cnblogs.com/rubylouvre/archive/2013/01/23/2872618.html)
[頁面插入script內容總結](https://github.com/damoclesX/damoclesX.github.io/issues/17)
[高性能網站優化 - 無阻塞加載腳本](https://zhanglun.github.io/2014/03/30/高性能網站優化-無阻塞加載腳本)
[關于Function.prototype.toString的野生小技巧](http://leeluolee.github.io/2015/04/13/function-to-string/)
## AMD簡單實現
[模塊管理的簡單實現方式](https://segmentfault.com/a/1190000006040968)
# 傳統JavaScript代碼的問題
讓我們來看看一般情況下JavaScript代碼是如何開發的:通過`<script>`標簽來載入JavaScript文件,用全局變量 來區分不同的功能代碼,全局變量之間的依賴關系需要顯式的通過指定其加載順序來解決,發布應用時要通過工具來壓縮所有的JavaScript代碼到一個文 件。當Web項目變得非常龐大,前端模塊非常多的時候,手動管理這些全局變量間的依賴關系就變得很困難,這種做法顯得非常的低效.
**模塊化帶來的最大弊端便是HTTP請求數增加,所以上線的時候必須合并文件。**
## 什么是模塊化
在了解AMD,CMD規范前,還是需要先來簡單地了解下什么是模塊化,模塊化開發?
模塊化是指在解決某一個復雜問題或者一系列的雜糅問題時,依照一種分類的思維把問題進行系統性的分解以之處理。模塊化是一種處理復雜系統分解為代碼結構更合理,可維護性更高的可管理的模塊的方式。可以想象一個巨大的系統代碼,被整合優化分割成邏輯性很強的模塊時,對于軟件是一種何等意義的存在。對于軟件行業來說:解耦軟件系統的復雜性,使得不管多么大的系統,也可以將管理,開發,維護變得“有理可循”。
還有一些對于模塊化一些專業的定義為:模塊化是軟件系統的屬性,這個系統被分解為一組高內聚,低耦合的模塊。那么在理想狀態下我們只需要完成自己部分的核心業務邏輯代碼,其他方面的依賴可以通過直接加載被人已經寫好模塊進行使用即可。
首先,既然是模塊化設計,那么作為一個模塊化系統所必須的能力:
1. 定義封裝的模塊。
2. 定義新模塊對其他模塊的依賴。
3. 可對其他模塊的引入支持。
好了,思想有了,那么總要有點什么來建立一個模塊化的規范制度吧,不然各式各樣的模塊加載方式只會將局攪得更為混亂。那么在JavaScript中出現了一些非傳統模塊開發方式的規范 CommonJS的模塊規范,AMD(Asynchronous Module Definition),CMD(Common Module Definition)等。
**還好ES6 的模塊化出來了,等到瀏覽器都實現 了,還需要這么復雜?**(參考:[ECMAScript 6 module and bundlers](http://www.meow.re/original/2016/08/30/es6-module-and-bundlers/))
如果你聽過 js 模塊化這個東西,那么你就應該聽過或CommonJS或AMD甚至是CMD這些規范咯,我也聽過,但之前也真的是聽聽而已。
現在就看看吧,這些規范到底是啥東西,干嘛的。
- 講解 Markdown
- 示例
- SVN
- Git筆記
- github 相關
- DESIGNER'S GUIDE TO DPI
- JS 模塊化
- CommonJS、AMD、CMD、UMD、ES6
- AMD
- RequrieJS
- r.js
- 模塊化打包
- 學習Chrome DevTools
- chrome://inspect
- Chrome DevTools 之 Elements
- Chrome DevTools 之 Console
- Chrome DevTools 之 Sources
- Chrome DevTools 之 Network
- Chrome DevTools 之 Memory
- Chrome DevTools 之 Performance
- Chrome DevTools 之 Resources
- Chrome DevTools 之 Security
- Chrome DevTools 之 Audits
- 技巧
- Node.js
- 基礎知識
- package.json 詳解
- corepack
- npm
- yarn
- pnpm
- yalc
- 庫處理
- Babel
- 相關庫
- 轉譯基礎
- 插件
- AST
- Rollup
- 基礎
- 插件
- Webpack
- 詳解配置
- 實現 loader
- webpack 進階
- plugin 用法
- 輔助工具
- 解答疑惑
- 開發工具集合
- 花樣百出的打包工具
- 紛雜的構建系統
- monorepo
- 前端工作流
- 爬蟲
- 測試篇
- 綜合
- Jest
- playwright
- Puppeteer
- cypress
- webdriverIO
- TestCafe
- 其他
- 工程開發
- gulp篇
- Building With Gulp
- Sass篇
- PostCSS篇
- combo服務
- 編碼規范檢查
- 前端優化
- 優化策略
- 高性能HTML5
- 瀏覽器端性能
- 前后端分離篇
- 分離部署
- API 文檔框架
- 項目開發環境
- 基于 JWT 的 Token 認證
- 扯皮時間
- 持續集成及后續服務
- 靜態服務器搭建
- mock與調試
- browserslist
- Project Starter
- Docker
- 文檔網站生成
- ddd