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 相关文章推荐
基于JQuery的asp.net树实现代码
Nov 30 Javascript
JS保留小数点(四舍五入、四舍六入)实现思路及实例
Apr 25 Javascript
基于Jquery实现键盘按键监听
May 11 Javascript
jQuery mobile在页面加载时添加加载中效果 document.ready 和window.onload执行顺序比较
Jul 14 Javascript
Bootstrap实现基于carousel.js框架的轮播图效果
May 02 Javascript
解决微信二次分享不显示摘要和图片的问题
Aug 18 Javascript
vue组件父子间通信详解(三)
Nov 07 Javascript
vue项目中axios使用详解
Feb 07 Javascript
JavaScript中的 new 命令
May 22 Javascript
ES6基础之数组和对象的拓展实例详解
Aug 22 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
Sep 24 Javascript
微信小程序入门之指南针
Oct 22 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
ThinkPHP的模版中调用session数据的方法
2014/07/01 PHP
php实现网站顶踩功能的完整前端代码
2015/07/19 PHP
PHP7 安装event扩展的实现方法
2019/10/08 PHP
DOM_window对象属性之--clipboardData对象操作代码
2011/02/03 Javascript
javascript 二进制运算技巧解析
2012/11/27 Javascript
一个JavaScript函数把URL参数解析成Json对象
2014/09/24 Javascript
gameboy网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点
2016/02/21 Javascript
在Html中使用Requirejs进行模块化开发实例详解
2016/04/15 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
2016/09/19 Javascript
详解React Native开源时间日期选择器组件(react-native-datetime)
2017/09/13 Javascript
详解react-router 4.0 下服务器如何配合BrowserRouter
2017/12/29 Javascript
js和jQuery以及easyui实现对下拉框的指定赋值方法
2018/01/23 jQuery
vue2.0 下拉框默认标题设置方法
2018/08/22 Javascript
JavaScript实现预览本地上传图片功能完整示例
2019/03/08 Javascript
Vue + ts实现轮播插件的示例
2020/11/10 Javascript
[04:26]2014DOTA2国际邀请赛-Newbee顺利进入胜者组决赛 独家专访战神7
2014/07/19 DOTA
[01:21]辉夜杯战队访谈宣传片—CDEC
2015/12/25 DOTA
Python实现的一个简单LRU cache
2014/09/26 Python
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
tensorflow识别自己手写数字
2018/03/14 Python
Python绘制3D图形
2018/05/03 Python
Python常用模块之requests模块用法分析
2019/05/15 Python
python tools实现视频的每一帧提取并保存
2020/03/20 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
2019/07/22 Python
python如何实现从视频中提取每秒图片
2020/10/22 Python
浅析Django中关于session的使用
2019/12/30 Python
python多线程实现代码(模拟银行服务操作流程)
2020/01/13 Python
python3 字符串知识点学习笔记
2020/02/08 Python
澳大利亚在线购买儿童玩具:Toy Universe
2017/12/28 全球购物
求职信范文大全
2014/05/26 职场文书
2014年外贸业务员工作总结
2014/12/11 职场文书
公司会议开幕词
2016/03/03 职场文书
CSS的class与id常用的命名规则
2021/05/18 HTML / CSS
java泛型通配符详解
2021/07/25 Java/Android
详解Redis在SpringBoot工程中的综合应用
2021/10/16 Redis
德劲DE1102数字调谐收音机机评
2022/04/07 无线电