webpack運行在node.js上,所以模塊化規範也同node.js 使用的是commonjs規範
commonjs規範內容
一個文件就是一個模塊,模塊間作用域互不影響
- 模塊的定義 module.exports
- 模塊的引用 require(‘標識符’)
- 模塊標識符
服務端
commonjs規範爲同步加載,適用於服務端,在瀏覽器中js加載會阻塞頁面渲染,因此同步不適用
瀏覽器端
產生了amd(require.js)和cmd(sea.js)規範。
- amd 異步模塊定義
- cmd 通用模塊定義
兩者都是進行異步加載。
amd依賴前置,依賴加載完後立即執行,執行順序不定,體驗好(提前執行完成);
cmd依賴後置,依賴加載完不執行,require時按順序執行,性能好(不需要的不執行)
webpack打包
webpack打包後的文件,將依賴都打包到同一文件中,通過id作爲模塊的標識。當文件很大時,webpack借鑑amd對代碼進行拆分code splitting,需要用到時再加載進來。
es6中import
import使用bable轉換後會變爲commonjs的require,這時如果直接放到瀏覽器中是無法運行的,還需要打包 如上webpack打包(預編譯)或使用browserify
- webpack 可以處理一些其它靜態資源等
- browserify 處理js包依賴