一、UglifyJS是什么?
UglifyJS是一个强大的JavaScript压缩和混淆工具,它能够:
- 压缩JavaScript代码,减少文件大小
- 优化代码性能
- 保护代码不被轻易阅读(混淆)
- 检测JavaScript语法错误
UglifyJS广泛应用于生产环境中的前端项目,是构建工具(如Webpack、Gulp)的重要组成部分。
二、基本使用方法
1. 安装UglifyJS
npm install uglify-js -g
2. 命令行压缩
uglifyjs input.js -o output.js
3. 基本选项
-c
:启用压缩-m
:启用混淆-o
:指定输出文件
示例:
uglifyjs input.js -c -m -o output.js
三、配置选项详解
当配置项增多时,使用配置文件会更方便管理。创建一个 uglify.config.json
文件,使用如下命令执行
uglifyjs input.js -o output.js --config-file uglify.config.json
1. 压缩选项
{
"compress": {
"drop_console": true,
"dead_code": true,
"unused": true
}
}
drop_console
: 删除console语句dead_code
: 删除未使用的代码unused
: 删除未使用的变量
2. 混淆选项
{
"mangle": {
"toplevel": true,
"eval": true,
"keep_fnames": false
}
}
toplevel
: 混淆顶层变量eval
: 混淆eval中的变量keep_fnames
: 不保留函数名
3. 输出格式
{
"output": {
"beautify": true,
"comments": false
}
}
beautify
: 美化输出comments
: 不保留注释
四、高级用法
你也可以在Node.js项目中使用UglifyJS的API。以下是一个简单的模板:
const UglifyJS = require('uglify-js');
const fs = require('fs');
const code = fs.readFileSync('demo.js', 'utf-8');
const result = UglifyJS.minify(code, {
compress: {
drop_console: true, // 删除console.log
},
mangle: true, // 启用混淆
output: {
beautify: false, // 不美化输出
comments: false, // 不保留注释
},
});
fs.writeFileSync('app-minified.js', result.code);
1. 保留特定代码
{
compress: {
drop_console: true,
dead_code: true
},
mangle: {
toplevel: true
},
output: {
comments: function(node, comment) {
// 保留特定注释
if (comment.value.indexOf('Some') >= 0) {
return true;
}
}
}
}
2. 处理特定函数
{
mangle: {
reserved: ['mySpecialFunction'] // 保留特定函数名
}
}
3. 性能优化
{
compress: {
sequences: true, // 合并多个语句
properties: true, // 优化属性访问
booleans: true, // 优化布尔表达式
if_return: true, // 优化if/return
join_vars: true // 合并变量声明
}
}
五、总结
UglifyJS是一个强大的工具,但使用时需要注意:
- 合理配置压缩选项
- 保留必要的代码
- 测试压缩后的代码
- 考虑性能影响