騰訊移動端的js模塊管理框架:MT

jopen 10年前發布 | 38K 次閱讀 前端技術 mt

MT是手機騰訊網前端團隊開發維護的一個專注于移動端的js模塊管理框架。

為什么使用MT

  • 無更新不下載

  • 簡單友好的模塊定義規范

  • 簡單易用的打包管理工具

  • 強大的js增量更新代理服務

快速上手(可查看demo目錄下代碼)

安裝mtbuild

github, npm

$ npm install mtbuild -g

項目結構

MT項目架構一般如下圖所示,release文件夾存放本地打包生成的內容,build.conf為打包配置文件。

騰訊移動端的js模塊管理框架:MT

編寫模塊

AMD...

define('p1', ['p2', 'p3'], function (p2, p3) { var o = {
        k: 'v' }; return o;
});

編寫配置

頁面配置:參考實例,在test.html中會存在一段單獨的script標簽,示意加載及打包配置。

<script type="text/javascript" id="file_config"> var g_config = { // 約定變量名為 g_config,  script 標簽 id 為 file_config jsmap:{ 'init': 'base.js', 'util': 'base.js', // 合并后指向同一個文件 'p1': 'page/p1.js', 'p2': 'page/p2.js', 'p3': 'page/p3.js' },
        storeInc:{ 'store': true, // 使用本地存儲 'inc': true, // 使用增量更新 'proxy':true, 'debug': false // 調試模式 },
        testEnv: false, // 標識是否為測試環境 staticPath: '/release', // 此項目靜態文件路徑 和 下面域名拼接
        serverDomain: 'http://localhost:6600', // 靜態文件服務器域名 buildType: 'project', // 標識版本管理類型 ver: '2014012000050' // 項目版本號 }; </script>

打包配置:參考實例,創建一個build.conf的配置文件

{ './release/{pv}/base-{fv}.js': {
        files: ['./js/init.js','./js/util.js']
    }, './release/{pv}/page/p1-{fv}.js': {
        files: ['./js/page/p1.js']
    }, './release/{pv}/page/p2-{fv}.js': {
        files: ['./js/page/p2.js']
    }, './release/{pv}/page/p3-{fv}.js': {
        files: ['./js/page/p3.js']
    }
}

本地打包

打開命令行工具,切換到項目目錄下,執行命令:(第一個參數為頁面配置文件路徑,第二個為打包配置文件路徑)

$mtbuild test.html build.conf

看到下圖提示證明打包成功:(啟動增量服務可忽略incResult的結果)

騰訊移動端的js模塊管理框架:MT

啟動增量服務

可以使用demo目錄里的一個用nodejs 寫的storeincServer

node storeincServer

效果演示

打開chrome(必須支持localstorage),輸入地址:http://localhost:6600/test.html,可以看到請求的是全量的js

騰訊移動端的js模塊管理框架:MT

本地存儲里的內容是49版本的:

騰訊移動端的js模塊管理框架:MT

修改demo里的幾個js內容,然后重新打包:

$mtbuild test.html build.conf

打開chrome(必須支持localstorage),輸入地址:http://localhost:6600/test.html,這時候可以看到請求的內容是增量的:

騰訊移動端的js模塊管理框架:MT

本地存儲里的內容是50版本的:

騰訊移動端的js模塊管理框架:MT

查看網絡請求,發現請求的內容是你本次修改的一些內容:

騰訊移動端的js模塊管理框架:MT

說明增量更新已經起了作用,就是這么簡單。具體原理可以看后面列車的增量更新算法設計。

還可以這么搞!

mtbuild離線生成增量更新文件

demo里的示例增量文件計算是靠storeincserver來做的,如果你沒法控制靜態資源服務器, 其實你可以用mtbuild來生成靜態增量更新文件,但是前臺的loader程序會根據用戶上次版本和本次版本相差為1的情況下才走增量更新,并且你需要配置proxy為false

storeInc:{ 'store': true, // 使用本地存儲 'inc': true, // 使用增量更新 'proxy':false,//是否使用代理 'debug': false // 調試模式 },

各種語言的增量更新計算服務

除了nodejs版本的storeincserver,我們還提供了java,php版本的增量更新計算服務,使用方法見文檔列表

seajs,requirejs兩大增量更新插件

如果你之前用了seajs或者用requirejs,現在不想改成mt,我們也提供了這兩個模塊管理器的增量更新插件,代碼在js里的seajs和requirejs目錄里面,使用方法參看后面的文檔列表

只使用core.js,不用增量更新

如果你覺得增量更新意義不大,但是覺得我們的mt模塊管理器還不錯想用,那么你可以直接使用core.js,不引入storeincload.js即可!

在自己的項目里面使用增量更新

如果你覺得我們這里的增量更新不錯,但是不想使用mt,也不想使用seajs,requirejs這些東西,只是想在自己的項目里面加入增量更新功能,那么請直接使用js/makemerge文件夾里的makein.js,merge.js。 其中makeinc.js是用來計算兩個文件的增量的,merge.js則是用來根據增量文件和原文件合并成新版文件的。

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

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