临近春节,项目结束了,没事情做,于是就想学学node.js,之前写了一个是为了实验室项目的需要,用c#写了个js代码压缩合并的小插件,后来想到可以用node重构,于是就练练手吧,下面小编直接给大家上代码了。
代码如下所示:
var writePath = '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');
var input = process.argv;
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没法比?(???)?不过练练手还是可以的......