SeaJS 是一個模塊加載器,模塊加載器須要實現兩個基本功能:javascript
在 CMD 規範中,一個模塊就是一個文件。代碼的書寫格式以下:css
define(factory)html |
// factory 爲對象java
factory參數的使用以下:node
require是一個函數方法,用來獲取其餘模塊提供的接口,並且是同步往下執行。require的模塊不能被返回時,應該返回null。jquery
require.async(id, callback?):用來在模塊內部異步加載模塊,並在加載完成後執行指定回調。require的模塊不能被返回時,callback應該返回null。callback接受返回的模塊做爲它的參數。編程
require.resolve(id):不會加載模塊,只返回解析後的絕對路徑緩存
爲何那麼死規定?!
首先你要知道SeaJS 是如何知道一個模塊的具體依賴的。SeaJS 經過 factory.toString() 拿到源碼,再經過正則匹配 require 的方式來獲得依賴信息。這也是必須遵照 require 書寫約定的緣由。異步
用來在模塊內部對外提供接口。
exports 僅僅是 module.exports 的一個引用。在 factory 內部給 exports 從新賦值時,並不會改變 module.exports 的值。所以給 exports 賦值是無效的,不能用來更改模塊接口。async
seajs.config({
base: 'http://code.jquery.com/'
});
// 在模塊代碼裏:
require.resolve('jquery');
// 解析爲 http://code.jquery.com/jquery.js
以下所示:
/js/b
可省略後綴.js,可是」.css」 後綴不可省略。
直接使用 script 標籤同步引入sea.js文件後,就可使用seajs.use(id, callback?)在頁面中加載模塊了!
經過define定義許多模塊後,得讓它們能跑起來,以下:
最佳實踐:
1
|
<script src="../gb/sea.js" id="seajsnode"></script>
|
講到seajs.use,固然要提一下Sea.js 的調試接口。
模塊加載大致流程:
文字描述:
RequireJS 遵循 AMD(異步模塊定義)規範,SeaJS 遵循 CMD (通用模塊定義)規範。
SeaJS按需執行依賴避免浪費,可是require時才解析的行爲對性能有影響。
SeaJS是異步加載模塊的沒錯, 但執行模塊的順序也是嚴格按照模塊在代碼中出現(require)的順序。
RequireJS更聽從js異步編程方式,提早執行依賴,輸出順序取決於哪一個 js 先加載完(不過 RequireJS 從 2.0 開始,也改爲能夠延遲執行)。若是必定要讓 模塊B 在 模塊A 以後執行,須要在 define 模塊時申明依賴,或者經過 require.config 配置依賴。