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 限制输入和粘贴(IE,firefox测试通过)
Nov 14 Javascript
简单的前端js+ajax 购物车框架(入门篇)
Oct 29 Javascript
jQuery+.net实现浏览更多内容(改编php版本)
Mar 28 Javascript
AngularJS初始化过程分析(引导程序)
Dec 06 Javascript
js实现感应鼠标图片透明度变化的方法
Feb 20 Javascript
简单谈谈javascript中的变量、作用域和内存问题
Aug 30 Javascript
JavaScript学习笔记之数组的增、删、改、查
Mar 23 Javascript
获取JavaScript异步函数的返回值
Dec 21 Javascript
微信小程序开发之从相册获取图片 使用相机拍照 本地图片上传
Apr 18 Javascript
swiper.js插件实现pc端文本上下滑动功能示例
Dec 03 Javascript
javscript 数组扁平化的实现
Feb 03 Javascript
在pycharm中开发vue的方法步骤
Mar 04 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与Java进行通信的实现方法
2013/10/21 PHP
生成随机字符串和验证码的类的PHP实例
2013/12/24 PHP
PHP获取文件扩展名的方法实例总结
2017/06/10 PHP
JavaScript中的变量声明早于赋值分析
2012/03/01 Javascript
jQuery基础框架浅入剖析
2012/12/27 Javascript
可编辑下拉框的2种实现方式
2014/06/13 Javascript
jquery引用方法时传递参数原理分析
2014/10/13 Javascript
DEDECMS如何为文章添加HOT NEW标志图片
2015/08/14 Javascript
JavaScript数据推送Comet技术详解
2016/04/07 Javascript
javascript过滤数组重复元素的实现方法
2017/05/03 Javascript
vue props传值失败 输出undefined的解决方法
2018/09/11 Javascript
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
2019/08/01 Javascript
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
Vue页面跳转传递参数及接收方式
2020/09/09 Javascript
vue实现登录功能
2020/12/31 Vue.js
pyqt4教程之widget使用示例分享
2014/03/07 Python
Python中变量交换的例子
2014/08/25 Python
寻找网站后台地址的python脚本
2014/09/01 Python
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
2015/02/04 Python
python简单实例训练(21~30)
2017/11/15 Python
python八大排序算法速度实例对比
2017/12/06 Python
教你用Python写安卓游戏外挂
2018/01/11 Python
python os.listdir按文件存取时间顺序列出目录的实例
2018/10/21 Python
Django stark组件使用及原理详解
2019/08/22 Python
用python写测试数据文件过程解析
2019/09/25 Python
Python日志logging模块功能与用法详解
2020/04/09 Python
基于python 取余问题(%)详解
2020/06/03 Python
Python 数据分析之逐块读取文本的实现
2020/12/14 Python
使用CSS3实现字体颜色渐变的实现
2020/08/10 HTML / CSS
Hanky Panky官方网站:内衣和睡衣
2019/07/25 全球购物
The North Face意大利官网:服装、背包和鞋子
2020/06/17 全球购物
中科方德软件测试面试题
2016/04/21 面试题
民族团结先进个人事迹材料
2014/06/02 职场文书
平安建设汇报材料
2014/12/29 职场文书
家长会主持词开场白
2015/05/29 职场文书
致运动员的广播稿
2015/08/19 职场文书