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实现自己的DOM选择器原理及代码
Mar 04 Javascript
JavaScript随机生成信用卡卡号的方法
Apr 07 Javascript
JS实现的简洁纵向滑动菜单(滑动门)效果
Oct 19 Javascript
原生JS实现平滑回到顶部组件
Mar 16 Javascript
JS访问DOM节点方法详解
Nov 29 Javascript
js验证手机号、密码、短信验证码代码工具类
Jun 24 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
Apr 14 Javascript
angular中的cookie读写方法
Aug 02 Javascript
vue-cli3脚手架的配置及使用教程
Aug 28 Javascript
vue通过滚动行为实现从列表到详情,返回列表原位置的方法
Aug 31 Javascript
Vue实现浏览器打印功能的代码
Apr 17 Javascript
javascript设计模式 ? 策略模式原理与用法实例分析
Apr 21 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运行环境教程
2015/02/12 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
2017/05/23 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
PHP PDOStatement::columnCount讲解
2019/01/30 PHP
表单提交验证类
2006/07/14 Javascript
js实现DIV的一些简单控制
2007/06/04 Javascript
document.documentElement &amp;&amp; document.documentElement.scrollTop
2007/12/01 Javascript
js验证输入是否为手机号码或电话号码示例
2013/12/30 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
js 获取浏览器版本以此来调整CSS的样式
2014/06/03 Javascript
微信小程序实现图片自适应(支持多图)
2017/01/25 Javascript
Vue.use源码分析
2017/04/22 Javascript
微信小程序开发之map地图实现教程
2017/06/08 Javascript
微信小程序报错:this.setData is not a function的解决办法
2017/09/27 Javascript
Vue修改mint-ui默认样式的方法
2018/02/03 Javascript
vue-cli脚手架引入图片的几种方法总结
2018/03/13 Javascript
mpvue构建小程序的方法(步骤+地址)
2018/05/22 Javascript
vue 组件的封装之基于axios的ajax请求方法
2018/08/11 Javascript
vue.extend与vue.component的区别和联系
2018/09/19 Javascript
vue新vue-cli3环境配置和模拟json数据的实例
2018/09/19 Javascript
layui 实现自动选择radio单选框(checked)的方法
2019/09/03 Javascript
taro小程序添加骨架屏的实现代码
2019/11/15 Javascript
解决vue中的无限循环问题
2020/07/27 Javascript
[01:11:37]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第一场 11.19
2020/11/19 DOTA
简单分析Python中用fork()函数生成的子进程
2015/05/04 Python
用Python实现筛选文件脚本的方法
2018/10/27 Python
Python基于mysql实现学生管理系统
2019/02/21 Python
python获取百度热榜链接的实例方法
2020/08/25 Python
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
个人求职信范文
2014/05/24 职场文书
英语投诉信范文
2015/07/03 职场文书
2015年教师节广播稿
2015/08/19 职场文书
公司团队口号霸气押韵
2015/12/24 职场文书
python 机器学习的标准化、归一化、正则化、离散化和白化
2021/04/16 Python
Java实现二维数组和稀疏数组之间的转换
2021/06/27 Java/Android
redis使用不当导致应用卡死bug的过程解析
2021/07/01 Redis