一、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是一个强大的工具,但使用时需要注意:
- 合理配置压缩选项
- 保留必要的代码
- 测试压缩后的代码
- 考虑性能影响


 400 186 1886
400 186 1886









