Node.js实现JS文件合并小工具
临近春节,项目结束了,没事情做,于是就想学学node.js,之前写了一个是为了实验室项目的需要,用c#写了个js代码压缩合并的小插件,后来想到可以用node重构,于是就练练手吧,下面小编直接给大家上代码了。
代码如下所示:
/*符合CommonJs规范*/
varwritePath='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){
/*合并对顺序有需求,所以同步读取文件*/
vardata=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){throwerr};
console.log('complete........');
});
};
内容虽少,不过还是想借此适应一下commomJS的模块化编程,所以就分出上面这个模块了^_^,文件名:compress.js。
下面是引用它的代码:
vara=require('./compress.js');/*加载compress模块‘./'表示相同目录下查找本地文件*/
varinput=process.argv;/*获取控制台输入数组(process引用当前进程)*/
a.run(input.slice(2)/*忽略前数组前两个*/);
文件名:run.js
控制台运行:
$noderuna.jsb.jsc.js....
即可把a.jsb.jsc.js(相对路径,也可使用绝对路径,路径定位和其他语言相似)压缩到默认的min.js里了。
当然,这个压缩还不够完善,空格去的不够完全,也没有基于流(还好压缩的JS文件都不大^_^),和专业的压缩插件如:uglify.js没法比╮(╯▽╰)╭不过练练手还是可以的......