使用 RequireJS 可以將我們的 JavaScript 代碼輕易的分割成苦幹個模塊(module),方便我們的開發與維護。但是在生產環境中,如果將所有的 JavaScript 文件分離,會導致很多次請求(requests),即使這個些文件都很小,也會浪費很多時間。
所以在生產環境中,我們可以通過合併這些腳本文件,以減少請求的次數達到節省加載時間的目的。
1,r.js 介紹
RequireJS 提供了一個打包壓縮工具 r.js,它是一個能運行基於 AMD 的項目的命令行工具,可以用來實現對模塊的合併壓縮。
2,功能特點
RequireJS Optimizer 有很多用處。它不僅能夠優化單個 JavaScript 或單個 CSS 文件,也可以優化整個項目或只是其中的一部分,甚至多頁應用程序(multi-page application)。它還可以使用不同的縮小引擎(minification engines)或者乾脆什麼都不用(no minification at all),等等。
3,安裝配置
(1)訪問其 GitHub 主頁:https://github.com/requirejs/r.js 並下載到本地。
(2)將 dist 文件夾下的 r.js 複製到項目文件夾下即可。
4,打包
根目錄下新建build.js文件,如下圖所示:
({
baseUrl: './js',
dir: './dist',
modules: [
{
name: 'main'
}
],
fileExclusionRegExp: /^(r|build)\.js$/,
optimizeCss: 'standard',
removeCombined: true,
paths: {
CusorWidget: 'empty:',
InterestPoint:'empty:',
MeasureWidget: 'empty:',
resourceURL: 'empty:',
ScanShowWidget:'empty:',
SceneManager: 'empty:',
SearchWidget:'empty:',
StatisticsWidget:'empty:',
VectorLayer:'empty:',
Zlib: 'empty:',
SuperMap: 'empty:',
jquery: "empty:",
echarts: 'empty:',
dark: 'empty:',
drag: 'empty:',
easyui: 'empty:',
colorPicker: 'empty:',
spectrum: 'empty:',
Cesium: "empty:"
}
})
參數說明:
- appDir:應用程序的目錄(即 <root>)。在這個文件夾下的所有文件將會被複制到 dir 參數標註的文件夾下。
- baseUrl:相對於 appDir,代表查找文件的錨點(that represents the anchor path for finding files)。
- dir:這是一個輸出目錄,所有的應用程序文件將會被複制到該文件夾下。
- modules:一個包含多個對象的數組。每個對象代表一個將被優化的模塊(module)。
- fileExclusionRegExp:任何與此規則匹配的文件或文件夾都將不會被複制到輸出目錄。由於我們把 r.js 和 build.js 放置在應用程序目錄下,我們希望優化器(optimizer)排除這兩個文件。 因此我們可以這樣設置 /^(r|build)\.js$/。
- optimizeCss:RequireJS Optimizer 會自動優化應用程序下的 CSS 文件。這個參數控制 CSS 最優化設置。具體可選值見上方 css 部分。
- removeCombined:如果爲 true,優化器(optimizer)將從輸出目錄中刪除已合併的文件。
- paths:模塊(modules)的相對目錄。
- shim:爲那些沒有使用 define() 聲名依賴關係及設置模塊值的模塊,配置依賴關係與“瀏覽器全局”出口的腳本。
打開命令行,執行 node r.js -o build.js