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 相关文章推荐
在IE6下发生Internet Explorer cannot open the Internet site错误
Jun 21 Javascript
js实现两个值相加alert出来精确到指定位
Sep 25 Javascript
使用mini-define实现前端代码的模块化管理
Dec 25 Javascript
html的DOM中Event对象onblur事件用法实例
Jan 21 Javascript
javascript判断css3动画结束 css3动画结束的回调函数
Mar 10 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
Feb 17 Javascript
vue-router:嵌套路由的使用方法
Feb 21 Javascript
axios基本入门用法教程
Mar 25 Javascript
vue + vuex todolist的实现示例代码
Mar 09 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
Sep 14 Javascript
vue resource发送请求的几种方式
Sep 30 Javascript
vue实现随机验证码功能(完整代码)
Dec 10 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/08/02 PHP
php fsockopen解决办法 php实现多线程
2014/01/20 PHP
php列出mysql表所有行和列的方法
2015/03/13 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
2015/12/28 PHP
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
PHP高精确度运算BC函数库实例详解
2017/08/15 PHP
一个cssQuery对象 javascript脚本实现代码
2009/07/21 Javascript
利用jQuery接受和处理xml数据的代码(.net)
2011/03/28 Javascript
Jquery中Ajax 缓存带来的影响的解决方法
2011/05/19 Javascript
jQuery方法简洁实现隔行换色及toggleClass的使用
2013/03/15 Javascript
JQuery实现防止退格键返回的方法
2015/02/12 Javascript
jQuery 判断是否包含在数组中Array[]的方法
2016/08/03 Javascript
jQuery 实现ajax传入参数含有特殊字符的方法总结
2016/10/17 Javascript
js实现导航栏中英文切换效果
2017/01/16 Javascript
tab栏切换原理
2017/03/22 Javascript
JS HTML图片显示Canvas 压缩功能
2017/07/21 Javascript
Echarts基本用法_动力节点Java学院整理
2017/08/11 Javascript
基于jQuery解决ios10以上版本缩放问题
2017/11/03 jQuery
vue 使用rules对表单字段进行校验的步骤
2020/12/25 Vue.js
[01:06:39]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第三局
2016/03/02 DOTA
实例讲解Python中SocketServer模块处理网络请求的用法
2016/06/28 Python
Python爬虫包 BeautifulSoup  递归抓取实例详解
2017/01/28 Python
对python中矩阵相加函数sum()的使用详解
2019/01/28 Python
python函数声明和调用定义及原理详解
2019/12/02 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
Numpy一维线性插值函数的用法
2020/04/22 Python
浅谈tensorflow模型保存为pb的各种姿势
2020/05/25 Python
让ie浏览器成为支持html5的浏览器的解决方法(使用html5shiv)
2014/04/08 HTML / CSS
Marc O’Polo俄罗斯官方在线商店:德国高端时尚品牌
2019/12/26 全球购物
Myprotein中国网站:欧洲畅销运动营养品牌
2021/02/11 全球购物
车间班长岗位职责
2013/11/30 职场文书
加拿大探亲邀请信
2014/01/28 职场文书
竞选体育委员演讲稿
2014/04/26 职场文书
公证委托书格式
2014/09/13 职场文书
Nginx快速入门教程
2021/03/31 Servers
Python语法学习之进程的创建与常用方法详解
2022/04/08 Python