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 相关文章推荐
JQuery的Alert消息框插件使用介绍
Oct 09 Javascript
JQueryEasyUI datagrid框架的基本使用
Apr 08 Javascript
JS实现局部选择打印和局部不选择打印
Apr 03 Javascript
js获取下拉列表的值和元素个数示例
May 07 Javascript
jQuery对于显示和隐藏等常用状态的判断方法
Dec 13 Javascript
jQuery回调函数的定义及用法实例
Dec 23 Javascript
jQuery中Form相关知识汇总
Jan 06 Javascript
理解和运用JavaScript的闭包机制
Aug 13 Javascript
Node.js的Web模板引擎ejs的入门使用教程
Jun 06 Javascript
Vue中的methods、watch、computed的区别
Nov 26 Javascript
vue登录以及权限验证相关的实现
Oct 25 Javascript
微信小程序视频弹幕发送功能的实现
Dec 28 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 编写的日历
2006/10/09 PHP
PHP用GD库生成高质量的缩略图片
2011/03/09 PHP
php中批量删除Mysql中相同前缀的数据表的代码
2011/07/01 PHP
php异常处理技术,顶级异常处理器
2012/06/13 PHP
解读PHP的Yii框架中请求与响应的处理流程
2016/03/17 PHP
php实现36进制与10进制转换功能示例
2017/01/10 PHP
ppk谈JavaScript style属性
2008/10/10 Javascript
jquery 设置style:display的方法
2015/01/29 Javascript
浅谈JavaScript中的作用域和闭包问题
2015/07/07 Javascript
jQuery绑定事件监听bind和移除事件监听unbind用法实例详解
2016/01/19 Javascript
JavaScript实现数据类型的相互转换
2016/03/06 Javascript
Bootstrap布局组件教程之Bootstrap下拉菜单
2016/06/12 Javascript
jQuery实现的网页换肤效果示例
2016/09/20 Javascript
Vue.js实战之组件之间的数据传递
2017/04/01 Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
2017/05/05 Javascript
JS计算两个数组的交集、差集、并集、补集(多种实现方式)
2019/05/21 Javascript
react 组件传值的三种方法
2019/06/03 Javascript
JS加载解析Markdown文档过程详解
2020/05/19 Javascript
JS访问对象两种方式区别解析
2020/08/29 Javascript
Vue + ts实现轮播插件的示例
2020/11/10 Javascript
python删除列表内容
2015/08/04 Python
python中使用print输出中文的方法
2018/07/16 Python
python实现飞机大战游戏(pygame版)
2020/10/26 Python
Python调用飞书发送消息的示例
2020/11/10 Python
自我鉴定范文200字
2013/10/02 职场文书
采购主管的岗位职责
2013/12/17 职场文书
上班打牌检讨书
2014/02/07 职场文书
信息管理应届生求职信
2014/03/07 职场文书
本科毕业生应聘求职信
2014/07/06 职场文书
财政局党的群众路线教育实践活动整改方案
2014/09/21 职场文书
2014年国庆节庆祝建国65周年比赛演讲稿
2014/09/21 职场文书
2015年置业顾问工作总结
2015/04/07 职场文书
运动会100米加油稿
2015/07/21 职场文书
2016新年致辞
2015/08/01 职场文书
Golang 获取文件md5校验的方法以及效率对比
2021/05/08 Golang
学习nginx基础知识
2021/09/04 Servers