首页 > 编程 > JavaScript > 正文

Node.js实现JS文件合并小工具

2019-11-20 10:38:16
字体:
来源:转载
供稿:网友

临近春节,项目结束了,没事情做,于是就想学学node.js,之前写了一个是为了实验室项目的需要,用c#写了个js代码压缩合并的小插件,后来想到可以用node重构,于是就练练手吧,下面小编直接给大家上代码了。

代码如下所示:

/*符合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没法比()不过练练手还是可以的......

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表