騰訊移動端的js模塊管理框架:MT
MT是手機騰訊網前端團隊開發維護的一個專注于移動端的js模塊管理框架。
為什么使用MT
-
無更新不下載
-
簡單友好的模塊定義規范
-
簡單易用的打包管理工具
-
強大的js增量更新代理服務
快速上手(可查看demo目錄下代碼)
安裝mtbuild
github, npm
$ npm install mtbuild -g
項目結構
MT項目架構一般如下圖所示,release文件夾存放本地打包生成的內容,build.conf為打包配置文件。
編寫模塊
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的結果)
啟動增量服務
可以使用demo目錄里的一個用nodejs 寫的storeincServer
node storeincServer
效果演示
打開chrome(必須支持localstorage),輸入地址:http://localhost:6600/test.html,可以看到請求的是全量的js
本地存儲里的內容是49版本的:
修改demo里的幾個js內容,然后重新打包:
$mtbuild test.html build.conf
打開chrome(必須支持localstorage),輸入地址:http://localhost:6600/test.html,這時候可以看到請求的內容是增量的:
本地存儲里的內容是50版本的:
查看網絡請求,發現請求的內容是你本次修改的一些內容:
說明增量更新已經起了作用,就是這么簡單。具體原理可以看后面列車的增量更新算法設計。
還可以這么搞!
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則是用來根據增量文件和原文件合并成新版文件的。