項目中用到require.js做生產時模塊開發,但上線要合並壓縮,幸好它配套有r.js。下面就其用法說明一下。
首先建一個目錄,里面的結構如下:
- require.js可以到r.js項目下載
- r.js可以到r.js項目下載
- server.exe可以到avalon項目下載
- jquery可以到JQ官網下載
- avalon.js可以到avalon項目下載,並把里面的loader: true改為 loader: false,禁止自帶的加載器。
- main.js是用於配置加載選項的,如shim機制,有時還做一些初始化操作。
- build.js是用於合並壓縮的。
index.html的內容如下:
<!doctype html> <html> <head> <title>avalon+requirejs</title> <meta charset="utf-8"> <script data-main="js/main" src="require.js"></script> <style type="text/css"> .wrapper { width: 200px; height: 200px; background: gray; } </style> </head> <body> <div class="wrapper" ms-controller="xxx">{{str}}</div> </body> </html>
main.js的內容以下:
require.config({ baseUrl: 'js', paths: { jquery: 'jquery', avalon: 'avalon' }, shim: { jquery: { exports: "jQuery" }, avalon: { exports: "avalon" } } }); require(['avalon',"jquery"], function(avalon, Q) { Q("body").append("test jq") avalon.define("xxx", function(vm){ vm.str = "加載成功" }) avalon.scan() });
因為main.js是相當於require.js的下一級目錄中,需要設置baseUrl。由於avalon與jquery都不是根據嚴格的AMD定義它的庫的結構(即,沒有用define方法包裹起來),我們需要通過shim機制處理一下。最后,我們還手動加載avalon,進行掃描綁定!
然后點擊 server.exe,打開IE或chrome。頁面加載,它就會加載require.js。require.js會找到加載它的那個script節點,發現它定義了data-main屬性,根據它的值去加載js/main.js文件,然后它配置自身,然后加載avalon並完成頁面的重新渲染!
我們再來看合並壓縮。打開build.js,里面的內容如下:
({ baseUrl: '', paths: { jquery: 'jquery', avalon: 'avalon' }, shim: { jquery: { exports: "jQuery" }, avalon: { exports: "avalon" } }, name: "main", out: "main-built.js" })
你想r.js做壓縮,還有一個必要條件,得安裝node.js,這個不詳談了,自己百度谷哥。然后要安裝r.js,window下打開控制台,輸入npm install -g requirejs。然后定位到js目錄下,輸入node r.js -o build.js,然后該目錄下就會多出main-built.js這個文件,表示合並成功!
然后上線時,將index.html中 data-main="js/main"改成 data-main="js/main-built"就行了。
build.js用到的配置項,英文文檔可見這里