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 getStyle获取最终样式函数代码
Apr 01 Javascript
JS图片预加载 JS实现图片预加载应用
Dec 03 Javascript
jQuery-serialize()输出序列化form表单值的方法
Dec 26 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
Mar 20 Javascript
JavaScript获取DOM元素的11种方法总结
Apr 25 Javascript
jQuery网页定位导航特效实现方法
Dec 19 Javascript
JS实现颜色梯度与渐变效果完整实例
Dec 30 Javascript
JavaScript实现的鼠标响应颜色渐变效果完整实例
Feb 18 Javascript
微信小程序 五星评分的实现实例
Aug 04 Javascript
ES6新增的math,Number方法
Aug 06 Javascript
Vue实现固定定位图标滑动隐藏效果
May 30 Javascript
vue 里面的 $forceUpdate() 强制实例重新渲染操作
Sep 21 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 截取字符串函数整理(支持gb2312和utf-8)
2010/02/16 PHP
探讨file_get_contents与curl效率及稳定性的分析
2013/06/06 PHP
yii上传文件或图片实例
2014/04/01 PHP
Ubuntu中支持PHP5与PHP7双版本的简单实现
2018/08/19 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
2019/08/30 PHP
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
jquery提交form表单简单示例分享
2014/03/03 Javascript
jQuery侧边栏实现代码
2016/05/06 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
jQuery实现web页面樱花坠落的特效
2017/06/01 jQuery
关于jquery layui弹出层的使用方法
2018/04/21 jQuery
JavaScript迭代器的含义及用法
2019/06/21 Javascript
js实现移动端轮播图滑动切换
2020/12/21 Javascript
[02:47]3.19DOTA2发布会 国服成长历程回顾
2014/03/25 DOTA
简单介绍Python中的round()方法
2015/05/15 Python
Python制作简易注册登录系统
2016/12/15 Python
浅谈Python中range和xrange的区别
2017/12/20 Python
PyQt5每天必学之组合框
2018/04/20 Python
PyTorch CNN实战之MNIST手写数字识别示例
2018/05/29 Python
Python爬虫之pandas基本安装与使用方法示例
2018/08/08 Python
pygame实现俄罗斯方块游戏(对战篇1)
2019/10/29 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
2020/04/08 Python
Python ckeditor富文本编辑器代码实例解析
2020/06/22 Python
如何把python项目部署到linux服务器
2020/08/26 Python
python跨文件使用全局变量的实现
2020/11/17 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
2021/01/07 Python
CSS3中的transform属性进行2D和3D变换的基本用法
2016/05/12 HTML / CSS
中国茶叶、茶具一站式网上购物商城:醉品茶城
2018/07/03 全球购物
即时搜索数百万张门票:SeatsForEveryone.com
2018/08/26 全球购物
中药专业大学生医药工作求职信
2013/10/25 职场文书
大学生村官个人对照检查材料(群众路线)
2014/09/26 职场文书
2014年派出所工作总结
2014/11/21 职场文书
Django REST framework 限流功能的使用
2021/06/24 Python
php将xml转化对象的实例详解
2021/11/17 PHP
VS2019连接MySQL数据库的过程及常见问题总结
2021/11/27 MySQL
电脑只能进入安全模式无法正常启动的解决办法
2022/04/08 数码科技