使用node.js,實現簡單的JS文件合並小工具


最近在學node.js,之前由於實驗室項目需要,用C#寫了個JS代碼壓縮合並的小插件,想想正好可以用node重構,來練練手。本人node新手,大神止步O(∩_∩)O

上代碼:

/*符合CommonJs規范*/
var writePath = 'min.js',/*默認輸出到本目錄min.js文件里*/
    fs = require('fs'),
    r1 = /^(.+)$/mg,/*分行*/
    r2 = /\s{2,}/g,/*去空格*/
    r3 = /([^\\])\/\/.*/g,/*去行注釋*/
    r4 = /\/\*.*?\*\//g,/*去塊注釋*/
    str = '';

module.exports.run = function(input){
    
    input.forEach(function(item){
        /*合並對順序有需求,所以同步讀取文件*/
        var data = fs.readFileSync(item, 'utf8'),
            lines = data.match(r1);/*行數組*/
         /*拼成一串*/
        lines.forEach(function(item){
            item = item.replace(r3, function($1, $2){return $2;});
            str = str + item;

        });
    });
    
    str = str.replace(r2,' ').replace(r4, '');   
    /*異步寫入到目標文件*/
    fs.appendFile(writePath, str, {encoding: 'utf8'}, function(err){
        if(err) {throw err};
        console.log('complete........');
    });
};

 

內容雖少,不過還是想借此適應一下commomJS的模塊化編程,所以就分出上面這個模塊了^_^,文件名:compress.js。

下面是引用它的代碼:

var a = require('./compress.js');/*加載compress模塊 ‘./’表示相同目錄下查找本地文件*/

var input = process.argv;/*獲取控制台輸入數組(process引用當前進程)*/

a.run(input.slice(2)/*忽略前數組前兩個*/);

文件名:run.js

控制台運行:

$ node run a.js b.js c.js....

即可把a.js b.js c.js (相對路徑,也可使用絕對路徑,路徑定位和其他語言相似)壓縮到默認的min.js里了。

當然,這個壓縮還不夠完善,空格去的不夠完全,也沒有基於流(還好壓縮的JS文件都不大^_^),和專業的壓縮插件如:uglify.js沒法比╮(╯▽╰)╭不過練練手還是可以的......

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM