JS 模塊化管理工具:Orderjs

jopen 11年前發布 | 37K 次閱讀 Orderjs JavaScript開發

rderjs 是一個開源的 JS 按需、異步加載工具,同時也是 JS 模塊化管理工具。

采用 MIT 協議,您可以免費使用,不限個人或商業用途。支持 IE6+,Firefox,Chrome 等主流瀏覽器。

按需、異步加載

按需加載,再也不必動則 xxx-all.js,更節省帶寬。異步無阻塞,不會阻止瀏覽器加載其它元素,充分利用瀏覽器特性提高網頁加載速度,提升用戶體驗。

模塊化管理

隨著 web 應用、網站的 JS 日益增多,模塊化管理 JS 是大勢所趨,也是最好的實踐。Orderjs 采用類 AMD 規范來管理模塊,讓 JS“定義嚴謹化,引用自由化”。

統一管理 JS 和 CSS

讓 Css 成為 JS 模塊可依賴的資源。在 Css 未加載完成之前,模塊不會執行。從此, Css 不再游離在 JS 模塊之外,在應用上達到完美統一。
假定我們有項目,目錄如下:
orderjs-site-struct.jpg
首先,在頁面上引入 order.js:
<script type="text/javascript" src="resource/js/order.js"></script> 

用 orderjs 加載 JS

加載 order.js 同目錄下相同位置的 JS;調用 orderjs(name) 函數,name 參數為模塊文件名(不包括擴展名):
<script type="text/javascript">
//加載所需模塊:
orderjs("jquery", "rainbow");

//OK, 引用模塊所定義的對象。
//但注意,因為 orderjs 是異步加載以上模塊的,所以不能直接引用:
jQuery("#xxx");

//而需要將以上語句打包,放到 js 執行隊列中,等待 jquery 等模塊加載完之后再執行,
//orderjs(fn) 函數即實現此功能:
orderjs(function(){
    jQuery("#xxx")
});
</script>
加載 order.js 同目錄下不同位置的 JS;調用 orderjs(name) 函數,name 參數為模塊相對(order.js)的路徑 + 文件名,路徑分隔符“/”需替換為模塊分隔符“.”:
<script type="text/javascript">
//加載所需模塊:
orderjs("form.SearchBox", "form.validation");

//引用模塊所定義的對象:
orderjs(function(){
    new SearchBox();
});
</script>

用 orderjs 加載 Css

由于 Orderjs 模塊(包括 js 和 css)的根目錄默認為 order.js 所在目錄,這里需調用 orderjs.config(name, value) 函數修改 css 模塊默認根目錄,然后調用 orderjs(name) 函數,name 參數為前綴 "css>" + 模塊文件名(不包括擴展名):
<script type="text/javascript">
//修改 css 模塊默認根目錄:
orderjs.config("root", {
    //路徑相對于 order.js 目錄,
    //注意:這里是路徑分隔符用“/”,不是模塊分隔符“.”,且最后一個 “/” 不能省略。
    css : "../css/"
});

//加載所需模塊:
orderjs("css>common", "css>rainbow-theme-dw");
</script>

一個真實的案子

本頁面模塊的加載即是利用 order.js 實現,您可以按右鍵 > 查看源代碼,或者直接點擊此處下載頁面源碼

模塊化管理

用 orderjs.define 定義模塊

文檔完善中...

模塊名轉換規則

文檔完善中...

進階應用

用短名稱自定義模塊根目錄(rootNS)

文檔完善中...

自動加載頁面通用模塊(data-main)

文檔完善中...

定義非 LAMD 模塊的依賴(shim)

文檔完善中...

跨域利用 CDN 資源(paths)

文檔完善中...

注意問題

這里將列出一些開始使用 orderjs 應注意的問題:

JS 習慣的轉換

同步到異步的切換:
全局變量到局部變量的切換:
文件命名的習慣:

應當了解的事項

orderjs 加載多個模塊時的執行順序。用 orderjs() 函數加載模塊,由于其下載時間是不定的,因此其被瀏覽器加載執行順序也是不定的。但可以通過 orderjs.define 來定義模塊,使其有序執行。
orderjs(fn) 的 fn 的執行時間與 domReady 無關。

為什么會有 Orderjs?

類似開源工具已有不少,Orderjs 的出現,多少或是習慣問題:
  • 模塊路徑分隔符不喜歡用"/":jQuery/ui/menu,喜歡用".": jQuery.ui.menu;
  • 不習慣 callback 風格: load("jquery", callback) ,而喜歡類 <script> 標簽的風格: orderjs("jquery"); orderjs(fn);
  • 某些框架不支持 css 加載;
當然,Orderjs 借了許多流行的框架的特性,如 shim, paths 等皆參考了 requireJs 等。

項目主頁:http://www.baiduhome.net/lib/view/home/1387154035437

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!