1. 程式人生 > 實用技巧 >頁面中引入seajs以及模組的載入和啟動

頁面中引入seajs以及模組的載入和啟動

本文轉載自官網上"模組的載入啟動#260"這篇文章,seajs官網上的文件都是中文的,大部分寫的也很清楚,看看就能上手了。這裡之所以轉載官網文件,一個是因為自己在學習階段,自己手動敲一遍印象會更深,一個是因為GitHub訪問比較慢,所以放在自己的部落格,以後看著方便點。

Sea.js 是一個模組載入器,模組載入器需要實現兩個基本功能:

1.實現模組定義規範,這是模組系統的基礎。
2.模組系統的啟動與執行。

模組系統的啟動

有了define等模組定義規範的實現,我們可以開發出很多模組。但光有一堆模組不管用,我們還得讓它們能跑起來。seajs中模組的啟動是通過seajs.use(id, callback?)實現的。

<script src="path/to/sea.js"></script>
<script>
  seajs.use('./main');
</script>

通過 use 方法,可以在頁面中載入任意模組:

// 載入模組 main,並在載入完成時,執行指定回撥
seajs.use('./main', function(main) {
  main.init();
});

use 方法還可以一次載入多個模組:

// 並行載入模組 a 和模組 b,並在都載入完成時,執行指定回撥
seajs.use(['./a', './b'], function(a, b) {
  a.init();
  b.init();
});

callback 引數可選,省略時,表示無需回撥。

sea.js 的引入

在呼叫 seajs.use 之前,需要先引入 sea.js 檔案,推薦直接使用 script 標籤同步引入:
<script src="path/to/sea.js" id="seajsnode"></script>
1.seajs.use 理論上只用於載入啟動,不應該出現在 define 中的模組程式碼裡。在模組程式碼裡需要非同步載入其他模組時,推薦使用 require.async 方法。 2.引入 sea.js 時,可以把 sea.js 與其他檔案打包在一起,可提前合併好,或利用 combo 服務動態合併。無論哪一種方式,為了讓 sea.js 內部能快速獲取到自身路徑,推薦手動加上 id 屬性: 加上 seajsnode 值,可以讓 sea.js 接獲取到自身路徑,而不需要通過其他機制去自動獲取。這對效能和穩定性會有一定提升,推薦預設都加上。

與 DOM ready 的關係

注意:seajs.use 與 DOM ready 事件沒有任何關係。如果某些操作要確保在 DOM ready 後執行,需要使用 jquery 等類庫來保證,比如:
seajs.use(['jquery', './main'], function($, main) {
  $(document).ready(function() {
    main.init();
  });
});