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 相关文章推荐
JavaScript中判断函数是new还是()调用的区别说明
Apr 07 Javascript
利用div+jquery自定义滚动条样式的2种方法
Jul 18 Javascript
jquery序列化表单以及回调函数的使用示例
Jul 02 Javascript
原生的html元素选择器类似jquery选择器
Oct 15 Javascript
js实现兼容IE、Firefox的图片缩放代码
Dec 08 Javascript
js中实现字符串和数组的相互转化详解
Jan 24 Javascript
微信小程序 swiper组件详解及实例代码
Oct 25 Javascript
动态加载JavaScript文件的3种方式
May 05 Javascript
微信小程序实现城市列表选择
Jun 05 Javascript
vue多次循环操作示例
Feb 08 Javascript
使用jQuery mobile NuGet让你的网站在移动设备上同样精彩
Jun 18 jQuery
vue-router二级导航切换路由及高亮显示的实现方法
Jul 10 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面向对象概念
2011/11/06 PHP
Joomla开启SEF的方法
2016/05/04 PHP
php根据年月获取当月天数及日期数组的方法
2016/11/30 PHP
理清PHP在Linxu下执行时的文件权限方法
2017/06/07 PHP
jQuery Ajax文件上传(php)
2009/06/16 Javascript
javascript 事件查询综合 推荐收藏
2010/03/10 Javascript
jquery的$(document).ready()和onload的加载顺序
2010/05/26 Javascript
JavaScript 匿名函数(anonymous function)与闭包(closure)
2011/10/04 Javascript
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
2011/10/24 Javascript
Jquery判断$(&quot;#id&quot;)获取的对象是否存在的方法
2013/09/25 Javascript
js取消单选按钮选中示例代码
2013/11/14 Javascript
jQuery实现向下滑出的二级菜单效果实例
2015/08/22 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
2016/06/24 Javascript
AngularJS实现用户登录状态判断的方法(Model添加拦截过滤器,路由增加限制)
2016/12/12 Javascript
微信小程序 wx.uploadFile无法上传解决办法
2016/12/14 Javascript
如何理解Vue的.sync修饰符的使用
2017/08/17 Javascript
Vue js 的生命周期(看了就懂)(推荐)
2019/03/29 Javascript
用vite搭建vue3应用的实现方法
2021/02/22 Vue.js
Python 面向对象 成员的访问约束
2008/12/23 Python
Python3基础之条件与循环控制实例解析
2014/08/13 Python
PyQt5每天必学之单行文本框
2018/04/19 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
2020/01/14 Python
python3.7通过thrift操作hbase的示例代码
2020/01/14 Python
在python中实现求输出1-3+5-7+9-......101的和
2020/04/02 Python
java字符串格式化输出实例讲解
2021/01/06 Python
Fanatics法国官网:美国体育电商
2019/08/27 全球购物
外语学院毕业生的自我鉴定
2013/11/28 职场文书
2015年销售员工作总结范文
2015/04/07 职场文书
党小组推荐意见
2015/06/02 职场文书
高一语文教学反思
2016/02/16 职场文书
2017年大学生寒假社会实践活动总结
2016/04/06 职场文书
入党申请书怎么写?
2019/06/11 职场文书
Python字符串对齐方法使用(ljust()、rjust()和center())
2021/04/26 Python
Python中super().__init__()测试以及理解
2021/12/06 Python
Java十分钟精通进阶适配器模式
2022/04/06 Java/Android
Win10开机修复磁盘错误怎么跳过?Win10关闭开机磁盘检查的方法
2022/09/23 数码科技