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中this关键字使用方法详解
Mar 08 Javascript
jquery的$getjson调用并获取远程的JSON字符串问题
Dec 10 Javascript
网页整体变灰白色(兼容各浏览器)实例
Apr 21 Javascript
javascript字符串与数组转换汇总
May 26 Javascript
AngularJS基础 ng-if 指令用法
Aug 01 Javascript
JS匿名函数类生成方式实例分析
Nov 26 Javascript
javascript获取指定区间范围随机数的方法
Sep 08 Javascript
js 原生判断内容区域是否滚动到底部的实例代码
Nov 15 Javascript
微信小程序实现的自定义分享功能示例
Feb 12 Javascript
详解async/await 异步应用的常用场景
May 13 Javascript
使用原生JS实现火锅点餐小程序(面向对象思想)
Dec 10 Javascript
js实现小星星游戏
Mar 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 一个页面执行时间类代码
2010/03/05 PHP
php while循环得到循环次数
2013/10/26 PHP
php获取淘宝分类id示例
2014/01/16 PHP
开源php中文分词系统SCWS安装和使用实例
2014/04/11 PHP
WordPress中对访客评论功能的一些优化方法
2015/11/24 PHP
PHP简单实现文本计数器的方法
2016/04/28 PHP
详解提高使用Java反射的效率方法
2019/04/29 PHP
JavaScript版TAB选项卡效果实例
2013/08/16 Javascript
JavaScript在for循环中绑定事件解决事件参数不同的情况
2014/01/20 Javascript
nodejs文件操作模块FS(File System)常用函数简明总结
2014/06/05 NodeJs
JavaScript 实现打印,打印预览,打印设置
2014/12/30 Javascript
javascript与Python快速排序实例对比
2015/08/10 Javascript
JavaScript面向对象之私有静态变量实例分析
2016/01/14 Javascript
JS实现旋转木马式图片轮播效果
2017/01/18 Javascript
从零学习node.js之mysql数据库的操作(五)
2017/02/24 Javascript
javascript使用btoa和atob来进行Base64转码和解码
2017/03/20 Javascript
angular+webpack2实战例子
2017/05/23 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
2019/11/06 Javascript
解决vue组件没显示,没起作用,没报错,但该显示的组件没显示问题
2020/09/02 Javascript
Python中每次处理一个字符的5种方法
2015/05/21 Python
Python编程实现线性回归和批量梯度下降法代码实例
2018/01/04 Python
Django2.1.3 中间件使用详解
2018/11/26 Python
用python写一个定时提醒程序的实现代码
2019/07/22 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
2020/01/04 Python
Tensorflow 卷积的梯度反向传播过程
2020/02/10 Python
多个python文件调用logging模块报错误
2020/02/12 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
2020/07/09 Python
基于logstash实现日志文件同步elasticsearch
2020/08/06 Python
python实现磁盘日志清理的示例
2020/11/05 Python
详解Css3新特性应用之过渡与动画
2017/01/10 HTML / CSS
介绍一下.net和Java的特点和区别
2012/09/26 面试题
数学教学随笔感言
2014/02/17 职场文书
歌唱比赛主持词
2014/03/18 职场文书
个人社会实践自我鉴定
2014/03/24 职场文书
竞选文艺委员演讲稿
2014/04/28 职场文书
村长反四风问题个人对照检查材料
2014/09/21 职场文书