码迷,mamicode.com
首页 > Web开发 > 详细

使用node.js,实现简单的JS合并小工具

时间:2015-03-16 16:23:29      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

最近在学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里了。

当然,这个压缩还不够完善,空格去的不够完全,也没有基于流,和专业的压缩插件如:uglify.js没法比╮(╯▽╰)╭不过练练手还是可以的......

 

使用node.js,实现简单的JS合并小工具

标签:

原文地址:http://www.cnblogs.com/liubingblog/p/4341767.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!