轉:利用node壓縮、合并js,css,圖片

來源:互聯網
上載者:User

1.安裝nodejs

http://nodejs.org/

2.安裝各自的node package

js我用的是UglifyJS github地址:https://github.com/mishoo/UglifyJS

css我用的是clean-css github地址:https://github.com/GoalSmashers/clean-css

圖片用的是node-smushit    github地址:https://github.com/colorhook/node-smushit

3.編寫代碼

//jsvar fs = require('fs');var jsp = require("uglify-js").parser;var pro = require("uglify-js").uglify; function jsMinifier(flieIn, fileOut) {     var flieIn=Array.isArray(flieIn)? flieIn : [flieIn];     var origCode,ast,finalCode='';     for(var i=0; i<flieIn.length; i++) {        origCode = fs.readFileSync(flieIn[i], 'utf8');        ast = jsp.parse(origCode);        ast = pro.ast_mangle(ast);        ast= pro.ast_squeeze(ast);         finalCode +=';'+ pro.gen_code(ast);     }    fs.writeFileSync(fileOut, finalCode, 'utf8');}//jsMinifier('./file-src/test2.js', './file-smin/test-min.js');  //單個檔案壓縮jsMinifier(['./file-src/test.js','./file-src/test2.js'], './file-smin/test-min.js'); //合并壓縮命令翻譯

UglifyJS使用

uglifyjs [ 選項... ] [ 檔案 ]

檔案參數應該放在選項後面,uglifyjs 會讀取檔案中的javascript代碼進行處理。如果你不指定輸出的檔案名稱,那麼他會把處理後的內容輸出到命令列中。

支援的選項 :

●   -b 或 –beautify - 輸出格式化代碼,當傳入該參數,下面的附加選項用於更美觀的控制格式化:

●   -i N 或 –indent N - 縮排層級(空格數量)

●   -q 或 –quote-keys - 是否用引號引起字串對象的鍵(預設只會引起不能被正確標誌的鍵名)

●   –ascii -預設 UglifyJS 不處理字元編碼而直接輸出 Unicode 字元,通過傳入該參數將非ASCII編碼的字元轉化為\cXXXX的序列(輸出總按照UTF8編碼,但傳入該選項能得到ASCII編碼的輸出)。

●   -nm 或 –no-mangle - 不改變變數名稱

●   -ns 或 –no-squeeze - 不調用 ast_squeeze() 函數(該函數會做多種最佳化使得結果更小,可讀性略有降低)

●   -mt 或 –mangle-toplevel - 在頂級範圍打亂變數名稱(預設不開啟)

●   –no-seqs - 當調用 ast_squeeze() 將會合并多個語句塊為一個語句塊,如 ”a=10; b=20; foo()” 將被轉換為 ”a=10,b=20,foo()”

●   –no-dead-code - 預設 UglifyJS 將會刪除不被用到的代碼,傳入該參數禁用此功能。

●   -nc 或 –no-copyright - 預設 uglifyjs 會在輸出後的代碼中添加著作權資訊等注釋代碼,傳入該參數禁用此功能。

●   -o 檔案名稱 或 –output 檔案名稱 - 指定輸出檔案名,如果不指定,則列印到標準輸出(STDOUT)

●   –overwrite - 如果傳入的JS代碼來自檔案而不是標準輸入,傳入該參數,輸出會覆蓋該檔案。

●   –ast - 傳入該參數會得到抽象的文法樹而不是Javascript,對調試或瞭解內部代碼很有用。

●   -v 或 –verbose - 在標準錯誤輸出一些資訊(目前的版本僅輸出操作用時)

●   –extra - 開啟附加最佳化,這些最佳化並未得到全面的測試。

●   –unsafe - 開啟其他附加最佳化,這些最佳化已知在特定情況下並不安全,目前僅支援:

●   foo.toString() ==> foo+””

●   –max-line-len (預設32K位元組) - 在32K位元組出增加分行符號,傳入0禁用此功能。

●   –reserved-names - 一些類庫會依賴一些變數,該參數指定的名稱不會被混淆掉,多個用逗號隔開

//cssvar cleanCSS = require('clean-css');function cssMinifier(flieIn, fileOut) {     var flieIn=Array.isArray(flieIn)? flieIn : [flieIn];     var origCode,finalCode='';     for(var i=0; i<flieIn.length; i++) {        origCode = fs.readFileSync(flieIn[i], 'utf8');        finalCode += cleanCSS.process(origCode);      }    fs.writeFileSync(fileOut, finalCode, 'utf8');} //cssMinifier('./file-src/indexw_20120913.css', './file-smin/index.css');  //單個檔案壓縮cssMinifier(['./file-src/index_20120913.css','./file-src/indexw_20120913.css'], './file-smin/index.css');//圖片var imgMinifier = require('node-smushit');//imgMinifier.smushit('./file-src/images', {recursive: true}); //遞迴imgMinifier.smushit('./file-src/images');

  

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.