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 Tab 导航插件 (23个)
Jun 11 Javascript
jQuery ajax BUG:object doesn't support this property or method
Jul 06 Javascript
jQuery中$(function() {});问题详解
Aug 10 Javascript
jQuery下拉框的简单应用
Jun 24 Javascript
详解js的事件代理(委托)
Dec 22 Javascript
TypeScript学习之强制类型的转换
Dec 27 Javascript
JavaScript实现的鼠标响应颜色渐变效果完整实例
Feb 18 Javascript
angularjs+bootstrap实现自定义分页的实例代码
Jun 19 Javascript
基于jquery实现多级菜单效果
Jul 25 jQuery
express+mockjs实现模拟后台数据发送功能
Jan 07 Javascript
React之PureComponent的使用作用
Jul 10 Javascript
实例详解vue中的$root和$parent
Apr 29 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多个版本的分析解释
2011/07/21 PHP
PHP Reflection API详解
2015/05/12 PHP
php封装的验证码工具类完整实例
2016/10/19 PHP
php 解析xml 的四种方法详细介绍
2016/10/26 PHP
php简单随机字符串生成方法示例
2017/04/19 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
php根据地址获取百度地图经纬度的实例方法
2019/09/03 PHP
JQuery分别取得每行最后一列和最后一行的示例代码
2013/08/18 Javascript
js通过元素class名字获取元素集合的具体实现
2014/01/06 Javascript
javascript实现跨域的方法汇总
2015/06/25 Javascript
jquery实现页面虚拟键盘特效
2015/08/08 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
javascript 正则表达式分组、断言详解
2017/04/20 Javascript
详解vue-resource promise兼容性问题
2017/06/20 Javascript
关于JavaScript的单双引号嵌套问题
2017/08/20 Javascript
AngularJS实现的生成随机数与猜数字大小功能示例
2017/12/25 Javascript
Nodejs中crypto模块的安全知识讲解
2018/01/03 NodeJs
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
JS中获取 DOM 元素的绝对位置实例详解
2018/04/23 Javascript
详解Webpack-dev-server的proxy用法
2018/09/08 Javascript
Vuex modules模式下mapState/mapMutations的操作实例
2019/10/17 Javascript
element-ui 远程搜索组件el-select在项目中组件化的实现代码
2019/12/04 Javascript
python使用电子邮件模块smtplib的方法
2016/08/28 Python
python使用pyqt写带界面工具的示例代码
2017/10/23 Python
python批量从es取数据的方法(文档数超过10000)
2018/12/27 Python
Django REST Framework序列化外键获取外键的值方法
2019/07/26 Python
利用Python实现kNN算法的代码
2019/08/16 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
html5定位并在百度地图上显示的示例
2014/04/27 HTML / CSS
百思买美国官网:Best Buy
2016/07/28 全球购物
德国最大的网上鞋店之一:Schuhe24.de
2017/06/10 全球购物
后勤主管工作职责
2013/12/07 职场文书
加入学生会演讲稿
2014/04/24 职场文书
节约用水的口号
2014/06/20 职场文书
合同审查法律意见书
2015/06/04 职场文书
培训心得体会怎么写
2016/01/25 职场文书