JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具


Posted in Javascript onDecember 10, 2010

昨天分享了 http://jscompress.sinaapp.com/ 这个小工具后,发现大家还是很喜爱的。

因此今天我把它json化了.用json传输数据,也开放了api 

 

本工具所有的功能实现都是由 http://jscompress.sinaapp.com/api 处理.(包括现在可以使用的这个在线压缩) 
所有的数据交换均由 HTTP POST 输入处理后由 json 作为数据输出格式. 

API参数 : http://jscompress.sinaapp.com/api?get={type}&code=(code)&type={compress only}

get={type},{type} 为可选的 compress (压缩) format (格式化) shuffle(混淆) 
code=(code),(code) 为必要的源代码. JavaScript的源代码 
type={compress},{compress} 注意该参数只有压缩的时候生效,可选 1(默认压缩) 2(YUI压缩) 3(GC压缩)

例:使用 CURL... POST 

http://jscompress.sinaapp.com/api?get=compress&code=var a=1;var b=2;&type=2

如果执行成功则返回结果:

{"code":"var a=1,b=2;\n","original_size":"16 Byte","now_size":"13 Byte","status":"Closure Compiler \u538b\u7f29\u5b8c\u6210.","minify":"81.25%"} 

 

然后我写了一个php文件,可以调用这个网站的api,把整个目录所有的js文件压缩或者混淆,格式化后保存到一个新目录。

这样就对那些懒上传文件的同学们基于方便了~~ 

直接下载地址: jstools.rar
高亮显示

<?php 
/* 
/## js 合并和压缩PHP脚本...可用于本地或者服务器. 
/## 本工具只能处理utf-8编码的 *.js 文件.否则会接收不到结果 
@ 风吟 (fengyin.name) 
@ http://jscompress.sinaapp.com/ 
*/ 
set_time_limit(0); 
function JsTools($options = array( 
'basepath' =>'./', //需要处理的脚本路径... 
'compiled' =>'./compiled/', //处理后新文件的路径... 
'type' =>'compress', //可选 compress (压缩) format (格式化) shuffle (混淆) 
'is_merger' =>true, // 是否需要把全部文件合并再进行处理 (压缩,格式化,混淆) 
'engine' =>'1'//此项只对 type 为 compress 时有效,1(默认) 2 (yui) 3(Closure Compiler) 
/* 
yui 和 Google Closure Compiler 压缩是不可逆的,一般情况下使用默认即可 
不推荐使用混淆. 
*/ 
)){ 
if (is_dir($options['basepath'])) { 
if ($dh = opendir($options['basepath'])) { 
while (($file = readdir($dh)) !== false) { 
if (strpos($file, '.js') !== false && strpos($file, '.min.js') === false) { 
$js[] = $file; 
} 
} 
closedir($dh); 
} 
} 
if ($options['is_merger']) { 
foreach($js as $jsfile) { 
$jscode.= file_get_contents($jsfile).';'; 
} 
$jscode = json_decode(api($jscode, $options['type'], $options['engine']), true); 
file_put_contents($options['compiled'].'all.min.js', $jscode['code']); 
} else { 
foreach($js as $jsfile) { 
$jscode = json_decode(api(file_get_contents($jsfile), $options['type'], $options['engine']), true); 
file_put_contents($options['compiled'].str_replace('.js', '.min.js', $jsfile), $jscode['code']); 
} 
} 
} 
function api($code, $type, $engine) { 
$ch = curl_init('http://jscompress.sinaapp.com/api'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, 'get='.$type.'&code='.urlencode($code).'&type='.$engine); 
$output = curl_exec($ch); 
curl_close($ch); 
return $output; 
} 
JsTools(); 
?>
Javascript 相关文章推荐
JS下拉框内容左右移动效果的具体实现
Jul 10 Javascript
Ajax中解析Json的两种方法对比分析
Jun 25 Javascript
浅谈javascript中的DOM方法
Jul 16 Javascript
js数组去重的方法汇总
Jul 29 Javascript
详解javascript事件冒泡
Jan 09 Javascript
JQuery EasyUI的使用
Feb 24 Javascript
javascript计时器编写过程与实现方法
Feb 29 Javascript
项目实践一图片上传之form表单还是base64前端图片压缩(前端图片压缩)
Jul 28 Javascript
微信小程序 图片宽度自适应的实现
Apr 06 Javascript
Vue 框架之键盘事件、健值修饰符、双向数据绑定
Nov 14 Javascript
详解JavaScript中关于this指向的4种情况
Apr 18 Javascript
使用Vue+Django+Ant Design做一个留言评论模块的示例代码
Jun 01 Javascript
js下关于onmouseout、事件冒泡的问题经验小结
Dec 09 #Javascript
客户端限制只能上传jpg格式图片的js代码
Dec 09 #Javascript
Javascript将string类型转换int类型
Dec 09 #Javascript
IE6下CSS图片缓存问题解决方法
Dec 09 #Javascript
web前端开发也需要日志
Dec 09 #Javascript
JS拖动技术 关于setCapture使用
Dec 09 #Javascript
一起来写段JS drag拖动代码
Dec 09 #Javascript
You might like
如何使用动态共享对象的模式来安装PHP
2006/10/09 PHP
php去掉URL网址中带有PHPSESSID的配置方法
2014/07/08 PHP
php+mysql实现数据库随机重排实例
2014/10/17 PHP
初识Laravel
2014/10/30 PHP
PHP与Java对比学习日期时间函数
2016/07/03 PHP
PHP实现计算器小功能
2020/08/28 PHP
jquery制作搜狐快站页面效果示例分享
2014/02/21 Javascript
javascript页面上使用动态时间具体实现
2014/03/18 Javascript
理解javascript封装
2016/02/23 Javascript
在AngularJS框架中处理数据建模的方式解析
2016/03/05 Javascript
JavaScript 中对象的深拷贝
2016/12/04 Javascript
Vue中如何实现轮播图的示例代码
2017/07/27 Javascript
js验证账户名是否重复
2020/05/26 Javascript
JavaScript位置参数实现原理及过程解析
2020/09/14 Javascript
[01:29:46]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第二局
2016/02/27 DOTA
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
[00:50]深扒TI7聊天轮盘语音出处6
2017/05/11 DOTA
[01:02:09]Liquid vs TNC 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21
2020/07/19 DOTA
python制作花瓣网美女图片爬虫
2015/10/28 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
Django开发的简易留言板案例详解
2018/12/04 Python
python三引号输出方法
2019/02/27 Python
Python基本数据结构之字典类型dict用法分析
2019/06/08 Python
Pyqt5自适应布局实例
2019/12/13 Python
Python tkinter布局与按钮间距设置方式
2020/03/04 Python
python开发前景如何
2020/06/11 Python
Python Switch Case三种实现方法代码实例
2020/06/18 Python
python爬虫中抓取指数的实例讲解
2020/12/01 Python
印度最大的时尚购物网站:Myntra
2018/09/13 全球购物
法国体育用品商店:GO Sport
2019/10/23 全球购物
Java中的异常处理机制的简单原理和应用
2013/04/27 面试题
怎样拟定创业计划书
2014/05/01 职场文书
《狼牙山五壮士》教学反思
2016/02/17 职场文书
大学生党员暑假实践(活动总结)
2019/08/21 职场文书
CSS3中Animation实现简单的手指点击动画的示例
2021/07/15 HTML / CSS
python 判断字符串当中是否包含字符(str.contain)
2022/06/01 Python