ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Uglifier选项完全速查表:60+压缩配置参数一文看懂

Uglifier选项完全速查表:60+压缩配置参数一文看懂 Uglifier选项完全速查表60压缩配置参数一文看懂【免费下载链接】uglifierRuby wrapper for UglifyJS JavaScript compressor.项目地址: https://gitcode.com/gh_mirrors/ug/uglifierUglifier 是一个用于 Ruby 的 JavaScript 压缩器封装 gem底层封装了经典的 UglifyJS 引擎一行代码即可把冗长的 JS 压缩为极小体积的生产版本。真正决定 Uglifier 压缩效果的是它提供的一套完整选项options体系——涵盖输出格式、压缩策略、变量混淆、源映射等 70 个配置参数。本文把全部 Uglifier 压缩选项整理成一张速查表带你一文看懂每个参数的默认值、作用与典型用法。30秒上手如何安装与传入 Uglifier 选项先安装 gemgem install uglifier或从源码构建git clone https://gitcode.com/gh_mirrors/ug/uglifier压缩代码的基本姿势只有两种传参方式后面所有选项都基于它们require uglifier # 方式一初始化时传选项 Uglifier.new(:mangle false).compile(File.read(source.js)) # 方式二静态方法直接传选项 Uglifier.compile(File.read(source.js), :mangle false) Uglifier 只支持 ES5。如果你的代码是 ES6README 建议改用 ruby-terser或在 Uglifier 中开启 harmony 实验模式见下文顶层选项。60 Uglifier 选项全貌一张地图看懂选项分组Uglifier 的全部选项按用途分成 8 组默认值定义在lib/uglifier.rb的DEFAULTS常量中文档列表见 README 的 Available options 一节选项分组参数数量管什么对应小节output17压缩后代码的长相引号、换行、注释、美化outputcompress33压缩器核心变换删死代码、内联变量、优化循环compressmangle6变量/函数名混淆改名缩短manglemangle_properties3对象属性名混淆mangle_propertiesparse5如何解析输入源码parsesource_map7生成源码映射方便线上排错source_map顶层选项5define、enclose、harmony等全局开关顶层关键规则任何分组选项都可以整体设为false完全禁用如compress: false跳过全部压缩变换设为true或传子哈希则与默认值合并。output 选项速查控制压缩文件的 17 个输出参数output组不改变逻辑只改变压缩产物的外观。选项默认值作用ascii_onlytrue非 ASCII 字符转义为 \x 序列comments:copyright注释保留策略:all、:jsdoc、:copyright、:none或正则inline_scriptfalse转义字符串中的/script防止内联脚本提前闭合quote_keysfalse给对象字面量的键加引号max_line_len32768压缩代码的最大行宽bracketizefalse给 if/for 等单语句块强制加花括号semicolonstrue用分号分隔语句更省字节preserve_linefalse保留输出行数与原文件一致beautifyfalse美化输出用于调试阅读indent_level4beautify 时缩进空格数indent_start0beautify 起始缩进级别width80beautify 时的换行宽度preamblenil在产物开头插入自定义代码或注释如 bannerwrap_iifefalse用括号包裹 IIFE注意会关闭negate_iifeshebangtrue保留 shell 脚本首行的#!quote_style0引号风格0自动 /:single/:double/:originalkeep_quoted_propsfalse保留属性名原有的引号保留版权注释的两种常用写法默认:copyright已会保留含Copyright或!开头的注释想用自定义正则时注意注释首尾符号/*、*/、//会被剥离、无法参与匹配例如保留/*! ... */应写Uglifier.new(output: {comments: /^!/})。compress 选项速查决定压缩强度的 33 个核心参数compress是 Uglifier 选项中最重的一组控制 UglifyJS 对代码做哪些变换。整体设为false可只做混淆不做压缩。代码清理类选项默认值作用dead_codetrue删除不可达的死代码drop_debuggertrue删除debugger;语句drop_consolefalse删除console.*调用生产环境强烈建议开启unusedtrue丢弃未引用的函数和变量side_effectstrue允许移除带preserve纯函数注释标记的调用keep_infinityfalse防止把Infinity压缩成1/0switchestrue去重并移除不可达的 switch 分支表达式优化类选项默认值作用sequencestrue用逗号运算符合并多条语句propertiestrue把obj[a]改写为更短的obj.aconditionalstrue优化 if 与三元表达式comparisonstrue对比较运算做二值优化evaluatetrue尝试折叠常量表达式booleanstrue布尔上下文各种简化loopstrue条件可静态判断时优化 while/doif_returntrue优化 if/return、if/continue 结构unsafe_compsfalse翻转、为、以利压缩有对象操作数时不安全变量与函数变换类选项默认值作用join_varstrue合并连续的var声明hoist_funstrue提升函数声明hoist_varsfalse提升var声明collapse_varsfalse合并单次使用的 var/const 定义reduce_varsfalse把只赋值一次且按常量使用的变量折叠掉reduce_funcsfalse内联单次使用的函数依赖 reduce_varsnegate_iifetrue取反 IIFE 条件以省去多余括号toplevelfalse连同顶层作用域一起丢弃未引用代码top_retain[]顶层白名单阻止unused删除指定函数/变量passes1压缩遍历轮数调大更省体积但更耗时keep_fargsfalse保留未使用的函数参数keep_fnamesfalse不丢弃函数定义中的名字unsafe 系列与纯函数假设选项默认值作用unsafefalse开启各类不安全变换的总开关unsafe_mathfalse把2 * x * 3优化为6 * x浮点精度可能受影响unsafe_protofalse把Array.prototype.slice.call(a)优化为[].slice.call(a)pure_gettersfalse假定属性访问无副作用开启后才能删纯属性读取pure_funcsnil列出无副作用函数结果未使用时可安全删掉调用mangle 与 mangle_properties变量混淆怎么配mangle负责把变量、函数名替换成 a、b、c 这类短名是缩小体积的大头。选项默认值作用mangletrue哈希设为false可整体跳过混淆evalfalse作用域内出现 eval 时是否仍混淆reserved[$super]不参与混淆的参数名白名单sortfalse按使用频率分配短名gzip 后体积可能反而变大toplevelfalse是否混淆顶层作用域的名字propertiesfalse开启属性名混淆实际由 mangle_properties 细调keep_fnamesfalse不修改函数名依赖Function.prototype.name时开启mangle_properties属性混淆默认关闭单独细调时支持选项默认值作用regexnil正则过滤哪些属性名参与混淆ignore_quotedfalse只混淆不带引号的属性名debugfalse混淆后保留原名前后缀便于调试parse 选项告诉 Uglifier 如何解析输入源码选项默认值作用bare_returnsfalse允许顶层return语句expressionfalse把输入当单个表达式解析如解析 JSONhtml5_commentstrue忽略 HTML5 风格注释shebangtrue支持首行#!commandstrictfalse严格模式解析source_map 选项7 个参数搞定源码映射线上压缩代码报错行号对不上开启源映射即可。Uglifier.new.compile_with_map(source)会返回压缩代码与 map若source_map选项传true产物末尾会自动追加 base64 内联的sourceMappingURL。选项默认值作用map_urlfalse追加到产物末尾的 source map 文件地址urlfalse追加的原始源码地址sourceURLsources_contentfalse把原始源码内容内嵌进 map 文件filenamenil输入文件名rootnil输入文件所在目录的 URLoutput_filenamenil压缩产物的文件名/URLinput_source_mapnil输入文件自身的 source map 内容顶层选项harmony、define、enclose 等全局开关选项默认值作用harmonyfalse启用 ES6/Harmony 实验模式内部切换lib/uglify-harmony.js官方建议配合关闭 mangle 与 compressdefine{}定义符号替换值如把DEBUG替换为false以触发死代码消除enclosefalse用函数包裹输出并以键值对注入外部变量keep_fnamesfalse一键同时开启 compress 与 mangle 的keep_fnameserror_context_lines8报错信息中上下文行数环境变量ERROR_CONTEXT_LINES可覆盖 Rails 用户重点看这里config/environments/production.rb中若需压缩 ES6应把config.assets.js_compressor :uglifier替换为config.assets.js_compressor Uglifier.new(harmony: true)3 个高频 Uglifier 配置组合可直接抄作业生产环境极限压缩配置Uglifier.new( compress: { drop_console: true, # 删掉所有 console.log toplevel: true, # 顶层未引用代码也删 passes: 2 # 多跑一轮压缩体积更小 }, mangle: { toplevel: true }, output: { comments: :none } ).compile(source)保留版权 自定义注释的正则写法# 保留 /*! 开头的 banner 注释 Uglifier.new(output: { comments: /^!/ }).compile(source)调试期只压缩不混淆配置Uglifier.new(mangle: false, output: { beautify: true, indent_level: 2 }).compile(source)Uglifier 选项常见误区与避坑指南⚠️误区 1ES6 代码报 Unexpected token—— Uglifier 核心只支持 ES5错误信息会提示你开启 harmonyUglifier.new(:harmony true)或改用 terser 系工具。⚠️误区 2wrap_iife: true后 IIFE 括号行为变了—— 开启wrap_iife会自动禁用negate_iife压缩选项两者互斥属预期行为。⚠️误区 3reduce_vars为什么默认不开—— 历史上它曾导致 JS 运行错误见 CHANGELOG 3.1.1 条Uglifier 默认保守关闭确认业务无依赖后再手动开启。⚠️误区 4mangle: false和compress: false的粒度—— 它们是整个分组开关只想关闭其中某项变换时传子哈希覆盖单个键即可如mangle: { properties: false }。⚠️误区 5注释正则匹配不上/* */—— 传给comments的正则不会看到注释首尾符号匹配/*!应写/^!/而非/^\/\*!/。总结Uglifier 压缩配置速查要点选项分 8 组output(17) /compress(33) /mangle(6) /mangle_properties(3) /parse(5) /source_map(7) / 顶层(5)全部默认值以lib/uglifier.rb的DEFAULTS为准想缩小体积优先动compressdrop_console、toplevel、passes和mangletoplevel: true想安全上线output: { comments: :copyright }保留版权、开启source_map生成映射遇到 ES6harmony: true实验性或换用 terser传错选项名会直接抛ArgumentError: Invalid option配置时以本表为纲快速排查把这张速查表收藏起来下次调 Uglifier 压缩配置时按分组对号入座即可。【免费下载链接】uglifierRuby wrapper for UglifyJS JavaScript compressor.项目地址: https://gitcode.com/gh_mirrors/ug/uglifier创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表