Uglifyjs(JS代码优化工具)入门 安装使用


Posted in Javascript onApril 13, 2020

UglifyJS使用入门

1、简介

UglifyJS是个包含JS解释器、代码最小化、压缩、美化的工具集,是前端开发打包的最常用工具之一。
CocosCreator引擎采用gulp管理构建流程,其中也使用UglifyJS来做代码的合并和压缩。

UglifyJS目前只能压缩JS代码,且只支持到ES5语法,尚不支持ES6。

2、安装

UglifyJS基于Node.js开发,所以首先确保安装了Node.js环境。
如果想以一个独立命令的方式运行,则使用以下命令安装

npm install uglify-js -g

安装完成后,输入 uglifyjs-V 查看版本号,检测安装是否成功。

如果想作为一个模块通过代码调用,则使用以下命令安装

npm install uglify-js --save-dev

3、用法

UglifyJS的命令格式如下

uglifyjs [input files] [options]

输入文件既可以是单个,也可以是多个,建议传参时先传文件,再传选项。UglifyJS会根据传入选项,把文件放在队列中依次解释。

例如,有一个名为 copy.js的js代码文件如下。

var fs = require('fs');
function main(argv) {
  fs.createReadStream(argv[0]).pipe(fs.createWriteStream(argv[1]));
}
var args = process.argv.slice(2);
if (!!args && args.length === 2) {
  main(args);
} else {
  console.log('args is invalid.');
}

我们现在来测试UglifyJS的几个常用选项。

3.1 -o 输出

uglifyjs copy.js -o min.js

上面命令传入 copy.js,输出到 min.js,结果如下。

var fs=require("fs");function main(argv){fs.createReadStream(argv[0]).pipe(fs.createWriteStream(argv[1]))}var args=process.argv.slice(2);if(!!args&&args.length===2){main(args)}

可以看到,效果是代码去空格且合并到一行,但函数和变量名都不变。

3.2 -c 压缩

uglifyjs copy.js -c -o min.js

上面命令传入 copy.js,压缩输出到 min.js,结果如下。

var fs=require("fs");function main(argv){fs.createReadStream(argv[0]).pipe(fs.createWriteStream(argv[1]))}var args=process.argv.slice(2);args&&2===args.length&&main(args);

和上一命令的效果基本相同,但把 if语句简化了。

3.3 -m 混淆

uglifyjs copy.js -m -c -o min.js

上面命令传入 copy.js,混淆+压缩输出到 min.js,结果如下。

var fs=require("fs");function main(r){fs.createReadStream(r[0]).pipe(fs.createWriteStream(r[1]))}var args=process.argv.slice(2);args&&2===args.length&&main(args);

可以看到,混淆+压缩的效果,就是在前面基础上,把函数参数用最简字母代替了。

整体说来,UglifyJS的混淆比较轻量,只是简化了函数参数和变量名,而不会修改语法树。

3.4 输入多文件

uglifyjs copy.js copy2.js -m -c -o min.js

上面命令传入 copy.js、 copy2.js,混淆+压缩输出到 min.js,结果如下。

var fs=require("fs");function main(e){fs.createReadStream(e[0]).pipe(fs.createWriteStream(e[1]))}(args=process.argv.slice(2))&&2===args.length&&main(args);var args;fs=require("fs");function main(e){fs.createReadStream(e[0]).pipe(fs.createWriteStream(e[1]))}(args=process.argv.slice(2))&&2===args.length&&main(args);

可以看到,效果就是在前面基础上,把多个输入文件顺序合并到同一行了,同时对变量重复命名做了规避。

下面是其他网友的补充

需要先安装node,进入命令行,查看node,npm是否正确安装。

Uglifyjs(JS代码优化工具)入门 安装使用

 

接下来安装UglifyJS,命令如:npm install uglify-js -g

Uglifyjs(JS代码优化工具)入门 安装使用

 

最后别忘了把node和npm添加到环境变量中,我的分别是

C:\Program Files (x86)\nodejs\;

C:\Users\taozhou\AppData\Roaming\npm;

Uglifyjs(JS代码优化工具)入门 安装使用

现在就可以使用uglifyjs就行压缩了,如

uglifyjs folder/dom.js -> folder/dom-min.js

会把目录folder下dom.js压缩,保存在同一个目录下。

详细参数参考: https://github.com/mishoo/UglifyJS

Javascript 相关文章推荐
JS获得QQ号码的昵称,头像,生日的简单实例
Dec 04 Javascript
js简单实现删除记录时的提示效果
Dec 05 Javascript
JavaScript检查弹出窗口是否被阻拦的方法技巧
Mar 13 Javascript
JavaScript每天定时更换皮肤样式的方法
Jul 01 Javascript
javascript解决小数的加减乘除精度丢失的方案
May 31 Javascript
使用jquery实现的循环连续可停顿滚动实例
Nov 23 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
Sep 19 Javascript
在Vue 中使用Typescript的示例代码
Sep 10 Javascript
vue里面使用mui的弹出日期选择插件实例
Sep 16 Javascript
深入理解Puppeteer的入门教程和实践
Mar 05 Javascript
Javascript原生ajax请求代码实例
Feb 20 Javascript
小程序中使用css var变量(使js可以动态设置css样式属性)
Mar 31 Javascript
node.js 一个简单的页面输出实现代码
Mar 07 #Javascript
服务器端的JavaScript脚本 Node.js 使用入门
Mar 07 #Javascript
JavaScript高级程序设计 读书笔记之十一 内置对象Global
Mar 07 #Javascript
拥抱模块化的JavaScript
Mar 07 #Javascript
那些年,我还在学习jquery 学习笔记
Mar 05 #Javascript
什么是DOM(Document Object Model)文档对象模型
Mar 05 #Javascript
JQuery魔力之$("tagName")与selector
Mar 05 #Javascript
You might like
phpQuery占用内存过多的处理方法
2013/11/13 PHP
js和php邮箱地址验证的实现方法
2014/01/09 PHP
采用thinkphp自带方法生成静态html文件详解
2014/06/13 PHP
完善CodeIgniter在IDE中代码提示功能的方法
2014/07/19 PHP
php常用数学函数汇总
2014/11/21 PHP
PHP浮点数精度问题汇总
2015/05/13 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
2015/10/27 PHP
thinkphp3.2中实现phpexcel导出带生成图片示例
2017/02/14 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
2017/02/28 PHP
[原创]提供复制本站内容时出现,该文章转自脚本之家等字样的js代码
2007/03/27 Javascript
javascript 获取图片尺寸及放大图片
2013/09/04 Javascript
JS小游戏之宇宙战机源码详解
2014/09/25 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
2014/11/13 Javascript
javascript截取字符串小结
2015/04/28 Javascript
浅谈javascript中的DOM方法
2015/07/16 Javascript
原生js实现的金山打字小游戏(实例代码详解)
2020/03/16 Javascript
js实现鼠标点击飘爱心效果
2020/08/19 Javascript
three.js如何实现3D动态文字效果
2021/03/03 Javascript
[43:35]TI4 循环赛第二日Liquid vs Fnatic
2014/07/11 DOTA
python使用ctypes模块调用windowsapi获取系统版本示例
2014/04/17 Python
django中模板的html自动转意方法
2018/05/27 Python
Python新手如何理解循环加载模块
2020/05/29 Python
css实例教程 一款纯css3实现的超炫动画背画特效
2014/11/05 HTML / CSS
HTML5 File API改善网页上传功能
2009/08/19 HTML / CSS
Pamela Love官网:纽约设计师Pamela Love的精美、时尚和穿孔珠宝
2020/10/19 全球购物
linux面试题参考答案(11)
2012/05/01 面试题
Linux机考试题
2015/10/16 面试题
上课打牌的检讨书
2014/02/15 职场文书
医生爱岗敬业演讲稿
2014/08/26 职场文书
我为党旗添光彩演讲稿
2014/09/10 职场文书
2015年上半年党建工作总结
2015/03/30 职场文书
培训通知
2015/04/17 职场文书
党支部考察鉴定意见
2015/06/02 职场文书
员工工作心得体会
2019/05/07 职场文书
Idea连接MySQL数据库出现中文乱码的问题
2021/04/14 MySQL
正则表达式拆分url实例代码
2022/02/24 Java/Android