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 相关文章推荐
javascript获取选中的文本的方法代码
Oct 30 Javascript
JavaScript中的Repaint和Reflow用法详解
Jul 27 Javascript
基于jQuery实现复选框是否选中进行答题提示
Dec 10 Javascript
干货分享:让你分分钟学会javascript闭包
Dec 25 Javascript
AngularJs中route的使用方法和配置
Feb 04 Javascript
javascript HTML+CSS实现经典橙色导航菜单
Feb 16 Javascript
Node.js Express 框架 POST方法详解
Jan 23 Javascript
knockoutjs模板实现树形结构列表
Jul 31 Javascript
小试SVG之新手小白入门教程
Jan 08 Javascript
vue 查看dist文件里的结构(多种方式)
Jan 17 Javascript
VueX模块的具体使用(小白教程)
Jun 05 Javascript
详解vue 组件的实现原理
Nov 12 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
php 日期时间处理函数小结
2009/12/18 PHP
php错误日志简单配置方法
2016/07/11 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
2020/04/06 PHP
jQuery EasyUI API 中文文档 可调整尺寸
2011/09/29 Javascript
jquery方法+js一般方法+js面向对象方法实现拖拽效果
2012/08/30 Javascript
动态的绑定事件addEventListener方法的使用
2014/01/24 Javascript
javascript如何使用bind指定接收者
2014/05/04 Javascript
JQuery中serialize()用法实例分析
2015/02/06 Javascript
jQuery实现摸拟alert提示框
2016/05/22 Javascript
js与applet相互调用的方法
2016/06/22 Javascript
Vue常用指令V-model用法
2017/03/08 Javascript
nodejs个人博客开发第七步 后台登陆
2017/04/12 NodeJs
Vue+Element UI+Lumen实现通用表格分页功能
2019/02/02 Javascript
ES6基础之默认参数值
2019/02/21 Javascript
vue实现购物车小案例
2019/09/27 Javascript
如何优雅地取消 JavaScript 异步任务
2020/03/22 Javascript
JS实现手风琴特效
2020/11/08 Javascript
[02:38]2018DOTA2亚洲邀请赛赛前采访-VGJ.T
2018/04/03 DOTA
Python常见数据结构详解
2014/07/24 Python
Python中str.format()详解
2017/03/12 Python
Django入门使用示例
2017/12/12 Python
一条命令解决mac版本python IDLE不能输入中文问题
2018/05/15 Python
pandas 读取各种格式文件的方法
2018/06/22 Python
示例详解Python3 or Python2 两者之间的差异
2018/08/23 Python
安装docker-compose的两种最简方法
2019/07/30 Python
泰国综合购物网站:Lazada泰国
2018/04/09 全球购物
NET程序员上机面试题
2015/05/23 面试题
职称自我鉴定
2013/10/15 职场文书
2014年标准化工作总结
2014/12/17 职场文书
2015年干部教育培训工作总结
2015/05/15 职场文书
公司规章制度范本
2015/08/03 职场文书
六年级语文教学反思
2016/03/03 职场文书
2019年“红色之旅”心得体会1000字(3篇)
2019/09/27 职场文书
Win11使用CAD卡顿或者致命错误怎么办?Win11无法正常使用CAD的解决方法
2022/07/23 数码科技