日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

从 RequireJS 到 SeaJS(2)

發布時間:2024/4/14 javascript 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从 RequireJS 到 SeaJS(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

從 requirejs.org 的首頁出發,接下來是快速入門和下載,我們來看下載頁面:Download

產出物

RequireJS 提供了三個文件:

  • require.js — 這是核心文件,提供 JavaScript 文件和模塊加載功能
  • require-jquery.js — 打包了 jquery 最新版本的 require.js
  • r.js — 優化工具,以及讓 RequireJS 的模塊可運行于 Node 和 Rhino 環境
  • SeaJS 提供的內容,目前也有三部分:

  • sea.js — 模塊加載器
  • modules — 可運行在 seajs 環境中的推薦模塊,在這里下載?modules.seajs.com
  • spm 等優化和支持工具
  • 如果安裝了 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)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。