javascript
从 RequireJS 到 SeaJS(2)
從 requirejs.org 的首頁出發,接下來是快速入門和下載,我們來看下載頁面:Download
產出物
RequireJS 提供了三個文件:
SeaJS 提供的內容,目前也有三部分:
如果安裝了 spm,?可以用 spm 獲取到 seajs 提供的一切:
| 1 2 3 | $ spm install seajs?? # 安裝 sea.js $ spm install jquery? # 安裝 modules 中的模塊 $ spm build a.js????? # 壓縮、打包等操作 |
SeaJS 的這種設計,是由其廣義定位(瀏覽器端的 NodeJS)決定的。在這種設計下:
1). require-jquery.js 必要性不大,在 SeaJS 里,用戶直接手工或用 combo 服務合并就好:
| 1 | http://a.tbcdn.cn/libs??seajs/1.0.2/sea.js,jquery/1.6.4/jquery.js |
簡單靈活,擴展性也好。需要打包其他類庫時,只需更改 url 參數。
2). r.js 在 SeaJS 里也是不必要的。modules 項目中的模塊,比如 backbone,目前可以直接運行于三種環境中:
在瀏覽器中直接使用:
| 1 | <script src="http://modules.seajs.com/backbone/0.5.3/backbone.js"></script> |
通過 seajs 加載:
| 1 2 3 4 5 | <script src="http://modules.seajs.com/seajs/1.0.2/sea.js"></scipt> <script> seajs.use('backbone/0.5.3/backbone', function(BB) { }); </script> |
在 node 中直接調用:
| 1 | var BB = require('./libs/backbone/0.5.3/backbone'); |
SeaJS 的方式接近 NodeJS,簡潔優雅,致力于生態圈的形成。
插件
RequireJS 提供了一系列插件:text, order, domReady, cs, i18n.
SeaJS 默認只支持 js 和 css 模塊,通過 text、coffee 和 less 插件來擴展支持的模塊類型。SeaJS 還提供了 map 插件,方便開發調試:在線本地調試大觀。對于 order 功能,推薦組合使用 LABjs 來實現。需要 domReady 時,則使用 jQuery 庫。至于 i18n, 感覺放在模塊加載框架里不太合適,可以做成獨立的國際化模塊。
插件實現機制上,RequireJS 采用的是鉤子模式:在 require.js 源碼中,主動判斷并調用插件代碼。
| 1 2 3 4 | // require.js function callPlugin(pluginName, depManager) { ??//... } |
SeaJS 的實現方式是,和原生 JavaScript 類似,暴露 prototype, 插件開發者通過給 prototype 添加新方法或覆蓋原有方法來實現插件功能:
| 1 2 3 4 5 6 7 8 9 10 11 | // plugin-xx.js define(funtion(require, exports, module) { ??var Require = require.constructor; ??var Module = module.constructor; ??// 覆蓋原有方法 ??Require.prototype.resolve = ... ??// 添加新方法 ??Module.prototype.extend = ... }); |
這種方式的好處是,在 sea.js 的代碼中,合理暴露 prototype 后,就不用怎么為插件考慮了。有了 prototype, 插件作者一定程度上可以“隨心所欲”。
進一步了解,請閱讀源碼:src/plugins
小結
SeaJS 的產出物受廣義定位影響,和 RequireJS 的定位是不一樣的。后續會進一步分析兩者的差異。
插件的設計無優劣。RequireJS 的方式很簡單,對插件作者的要求不高。SeaJS 的插件開發方式,好處是 sea.js 本身可以保持很純粹,不足之處是需要插件作者對 SeaJS 比較熟悉,入門更高。
后續博文會分析兩者在 API 和使用場景上的差異。
總結
以上是生活随笔為你收集整理的从 RequireJS 到 SeaJS(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cisco 动态多点***原理
- 下一篇: nginx服务器的配置