這一篇來認識下打包工具的paths參數,在入門一中就介紹了require.config方法的paths參數。用來配置jquery模塊的文件名(jQuery作為AMD模塊時id為“jquery”,但文件名可通過paths配置可以不必是“jquery.js”,而是帶有版本的如“jquery-1.7.2.js”)。
在入門一中,jquery-1.7.2.js和main.js都在一個域中,即把jquery-1.7.2.js下載到本地了。但有時可能一些JS資源不在同一個域。比如直接使用Google CDN上的jquery 1.7.2版本。而這時應該如何使用打包工具r.js呢?
r.js自然不會去載入非本地資源,即沒有辦法去把外域的js文件請求下來再合並,壓縮。當使用paths參數后,使用r.js合並壓縮時要忽略paths映射的文件-不合並它。讓其作為一個獨立模塊請求。
創建目錄及文件如下
和上一篇一樣,但main.js代碼不同,注意目錄中沒有jQuery庫。
main.js
require.config({ baseUrl: 'js', paths: { 'jquery': 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min' } }); require(['jquery', 'event', 'selector'], function($, E, S) { alert($); });
配置了paths參數,即jquery模塊使用Google CDN的文件。
如果按照上一篇的命令來執行合並壓縮,
node r.js -o baseUrl=js name=main out=built.js
發現命令行報錯了,提示“D:\work\req\r5\js\jquery.js”不存在。剛剛新建的目錄中的確沒有jquery.js,因為我們使用的是Google CDN上的jquery。
此時壓縮參數paths就排上用處了,修改如下
node r.js -o baseUrl=js name=main out=built.js paths.jquery=empty:
注意紅色圈住的參數(empty后有個冒號哦),表示paths.jquery不參與合並,壓縮。這時生成的built.js也就不包含它了。
把目錄r5放到apache或其它web服務器上,訪問index.html。
網絡請求如下
built.js包含了main.js、event.js、cache.js,selector.js。jquery則是獨立的一個請求,來自ajax.googleapis.com。
再看看如何使用r.js來合並壓縮css文件。在r5下新建一個css文件夾,里面有四個css文件:main.css、nav.css、form.css、grid.css。
main.css是合並的主文件,或稱配置文件。要合並的文件使用@import引入。如下
main.css
@import url("nav.css"); @import url("grid.css"); @import url("form.css");
另外三個是普通的css文件,里面定義的各種樣式。這里不貼代碼了。這里將使用命令行將這四個文件合並后生成到r5/css/built.css。
node r.js -o cssIn=css/main.css out=css/built.css
這時回到r5/css目錄會發現多了一個built.css文件,該文件是另外四個css文件的合並項。
還可以使用optimizeCss參數設置來配置是否壓縮及壓縮選項。optimizeCss的取值有standard/none/standard.keepLines/standard.keepComments/standard.keepComments.keepLines。
none 不壓縮,僅合並
standard 標准壓縮 去換行、空格、注釋
standard.keepLines 除標准壓縮外,保留換行
standard.keepComments 除標准壓縮外,保留注釋
standard.keepComments.keepLines 除標准壓縮外,保留換行和注釋
示例:
node r.js -o cssIn=css/main.css out=css/built.css optimizeCss=standard
壓縮后built.css整個為一行了。
總結:
1,對於path配置的非本地的模塊文件,使用r.js合並壓縮時需要配置paths.xx=empty:。
2,cssIn和optimizeCss參數的使用來合並壓縮css文件。