自es6以前,JavaScript是天生模塊化缺失的,即缺少類似后端語言的class,
作用域也只以函數(shù)作為區(qū)分。這與早期js的語言定位有關,
作為一個只需要在網(wǎng)頁中嵌入幾十上百行代碼來實現(xiàn)一些基本的交互效果的腳本語言,
確實用不著嚴格的組織代碼規(guī)范。但是隨著時代的發(fā)展,js承擔的任務越來越重,
從原先的script引入幾十行代碼即可的狀態(tài)變成現(xiàn)在多人協(xié)作文件眾多的地步,
管理和組織代碼的難度越來越大,模塊化的需求也越來越迫切。
在此背景下,眾多的模塊化加載器便應運而生。
模塊化規(guī)范和實現(xiàn)
前文提到在es6模塊化出現(xiàn)之前,為了解決模塊化的需求,出現(xiàn)了眾多的模塊化機制例如cmd,amd等。遵循不同規(guī)范有sea.js, require.js等實現(xiàn)。
AMD:
Asynchronous Module Definition 異步模塊定義。瀏覽器端模塊化開發(fā)的規(guī)范,
模塊將被異步加載,模塊加載不影響后面語句的運行。所有依賴某些模塊的語句均放置在回調(diào)函數(shù)中。
AMD 是 RequireJS 在推廣過程中對模塊定義的規(guī)范化的產(chǎn)出。require.js詳情參考//依賴前置,jquery模塊先聲明define(['jquery'], function ($) {/***/})
CommonJS:
CommonJS是服務器端模塊的規(guī)范,Node.js采用了這個規(guī)范。Node.JS首先采用了js模塊化的概念。CommonJS規(guī)范參考//同步加載var $ = require('jquery');/****/module.exports = myFunc;
CMD:
CMD(Common Module Definition) 通用模塊定義。該規(guī)范是SeaJS推廣過程中發(fā)展出來的。
與AMD區(qū)別:
AMD是依賴關系前置,CMD是按需加載。更多參考define(function (require, exports, module) {// 就近依賴var $ = require('jquery');/****/})
UMD:
Universal Module Definition 通用模塊規(guī)范。
基于統(tǒng)一規(guī)范的目的出現(xiàn),看起來沒那么簡約,但是支持amd和commonjs以及全局模塊模式。//做的工作其實就是這么粗暴,判斷當前用的什么就以當前規(guī)范來定義(function (root, factory) {if (typeof define === 'function' && define.amd) {// A