html-minifier 的 --minify-js true 选项需依赖 terser 且仅压缩内联脚本:若未安装 terser、语法不兼容、含 module/nomodule 属性或危险语句,会静默跳过;它不处理外部 JS,也不跨 script 块优化,压缩效果取决于原始 JS 质量。
HTML 本身不压缩 JS,真正起作用的是 html-minifier 这类工具在处理内联 <script> 时调用的 JS 压缩器(比如 uglify-js 或 terser),不是浏览器或 HTML 标准自带的能力。
html-minifier --minify-js true 有时没效果默认情况下 html-minifier 不启用 JS 压缩,即使加了 --minify-js true,也会因依赖缺失或语法错误直接跳过:
html-minifier v4+ 已弃用内置 uglify-js,改用 terser;若未安装 terser,该选项静默失效terser 版本太旧,会报错并跳过压缩<script> 标签含 type="module" 或 nomodule 属性时,html-minifier 默认不处理——需显式加 --minify-js true 且确保 terser 支持对应语法document.write、eval 或 with 语句,terser 可能拒绝压缩以防运行时行为改变html-minifier 调用 terser 的实际行为它不是把 JS 拿出来“单独压缩再塞回去”,而是将内联脚本内容传给 terser.minify(),再把返回结果写回 HTML。这意味着:
<script> 块,跨标签的变量/函数不会被混淆或合并<script src="xxx.js"></script>),只管内联代码/*#__PURE__*/ 注释,terser 可能移除其包裹的表达式(如无副作用的函数调用)console、alert 等调试语句;要去掉得额外配 terser 的 drop_console: true
执行命令后没报错但 JS 没变小,先检查终端是否输出类似:
立即学习“Java免费学习笔记(深入)”;
Warning: unable to minify script (error: Unexpected token: name (myVar))
这类提示说明 terser 解析失败。解决方式包括:
terser v5+ 要求)terser:npm install terser@latest --save-dev
--terser-parse-options '{"ecma":2022}'
`<div>${x}</div>`),html-minifier 可能提前解析出错,建议改用 <script type="text/template"> 包裹非执行代码真正容易被忽略的是:JS 压缩效果高度依赖原始代码质量。空函数、重复逻辑、未使用的导出,terser 能删,但 html-minifier 自身不分析 JS 作用域——它只负责“转发”和“粘贴”。所以别指望靠一个 HTML 工具解决 JS 体积问题。