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


Posted in Javascript onFebruary 02, 2016

临近春节,项目结束了,没事情做,于是就想学学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没法比?(???)?不过练练手还是可以的......

Javascript 相关文章推荐
JavaScript中的History历史对象
Jan 16 Javascript
JS删除字符串中重复字符方法
Mar 09 Javascript
对Web开发中前端框架与前端类库的一些思考
Mar 27 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
May 26 Javascript
lhgcalendar时间插件限制只能选择三个月的实现方法
Jul 03 Javascript
利用ES6实现单例模式及其应用详解
Dec 09 Javascript
vue短信验证性能优化如何写入localstorage中
Apr 25 Javascript
vue项目中使用Svg的方法
Oct 24 Javascript
layui实现checkbox的目录树tree的例子
Sep 12 Javascript
JavaScript中break、continue和return的用法区别实例分析
Mar 02 Javascript
微信小程序仿抖音短视频切换效果的实例代码
Jun 24 Javascript
详解Anyscript开发指南绕过typescript类型检查
Sep 23 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
Feb 02 #Javascript
JavaScript通过代码调用Flash显示的方法
Feb 02 #Javascript
AngularJS中$interval的用法详解
Feb 02 #Javascript
AngularJS中处理多个promise的方式
Feb 02 #Javascript
AngularJS数据源的多种获取方式汇总
Feb 02 #Javascript
多种JQuery循环滚动文字图片效果代码
Jun 23 #Javascript
三种AngularJS中获取数据源的方式
Feb 02 #Javascript
You might like
PHP批量查询WordPress留言者E-mail地址实现方法
2015/02/15 PHP
CodeIgniter配置之database.php用法实例分析
2016/01/20 PHP
php删除数组指定元素实现代码
2017/05/03 PHP
php设计模式之观察者模式定义与用法经典示例
2019/09/19 PHP
XML的代替者----JSON
2007/07/21 Javascript
Iframe自适应高度绝对好使的代码 兼容IE,遨游,火狐
2011/01/27 Javascript
纯JS实现的批量图片预览加载功能
2011/08/14 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
2013/10/20 Javascript
如何解决ligerUI布局时Center中的Tab高度大小
2015/11/24 Javascript
javascript实现自动填写表单实例简析
2015/12/02 Javascript
Javascript获取数组中的最大值和最小值的方法汇总
2016/01/01 Javascript
JQUERY表单暂存功能插件分享
2016/02/23 Javascript
浅谈在node.js进入文件目录的问题
2018/05/13 Javascript
使用vue-router与v-if实现tab切换遇到的问题及解决方法
2018/09/07 Javascript
JS数组Object.keys()方法的使用示例
2019/06/05 Javascript
[03:04]DOTA2英雄基础教程 影魔
2013/12/11 DOTA
[01:35]辉夜杯战队访谈宣传片—iG.V
2015/12/25 DOTA
python 判断一个进程是否存在
2009/04/09 Python
Djang中静态文件配置方法
2015/07/30 Python
Python的IDEL增加清屏功能实例
2017/06/19 Python
多个应用共存的Django配置方法
2018/05/30 Python
在Python中画图(基于Jupyter notebook的魔法函数)
2019/10/28 Python
Python imutils 填充图片周边为黑色的实现
2020/01/19 Python
Mysql数据库反向生成Django里面的models指令方式
2020/05/18 Python
matplotlib交互式数据光标mpldatacursor的实现
2021/02/03 Python
基于注解实现 SpringBoot 接口防刷的方法
2021/03/02 Python
详解CSS3开启硬件加速的使用和坑
2017/08/21 HTML / CSS
实例讲解HTML5的meta标签的一些应用
2015/12/08 HTML / CSS
教师实习自我鉴定
2013/12/14 职场文书
刊首寄语大全
2014/04/11 职场文书
药品业务员岗位职责
2014/04/17 职场文书
小学生节约用水倡议书
2014/05/15 职场文书
运动会口号16字
2014/06/07 职场文书
审计局2014法制宣传日活动总结
2014/11/01 职场文书
2014年除四害工作总结
2014/12/06 职场文书
辞职书格式样本
2015/02/26 职场文书