1. 安装
全局装一次,以后随便用:
npm install terser -g
不想全局装,就用 npx 临时跑:
npx terser ...
下面所有命令都假设你已经全局装了。
2. 最简命令
terser input.js -o output.min.js
这行只做了一件事:去掉空格、换行、注释,不压缩逻辑,不混淆变量。出来的文件体积略小,但效果很弱。
3. 核心参数:-c(压缩)
-c 开启真正的代码压缩,包括:
- 删除死代码(
if(false)里的内容) - 合并表达式(
a = 1 + 2→a = 3) - 缩短逻辑(
if (x) foo()→x && foo()) - 等等
基础用法
terser input.js -o output.min.js -c
带子参数
-c 后面可以跟一个逗号分隔的键值列表,不加空格,例如:
terser input.js -o output.min.js -c passes=2,drop_console=true
常用的子参数:
| 子参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
passes | 数字 | 1 | 压缩轮数,2 或 3 效果更好,但耗时增加 |
drop_console | 布尔 | false | 删掉所有 console.*,慎用 |
pure_funcs | 数组 | null | 只删除指定函数,如 pure_funcs=['console.log','alert'] |
dead_code | 布尔 | true | 删除不可达代码,一般不用改 |
unsafe | 布尔 | false | 启用更激进优化(如 void 0 → undefined),可能改变某些边缘行为 |
hoist_vars | 布尔 | false | 将 var 提升到作用域顶部,有时能省几个字符 |
示例:两轮压缩 + 删除所有 console.log,但保留 console.error:
terser app.js -o app.min.js -c passes=2,pure_funcs=['console.log']
4. 核心参数:-m(混淆)
-m 把变量名、函数名换成短字母,例如 userName → a。
基础用法
terser input.js -o output.min.js -m
带子参数
同样支持逗号分隔的键值列表:
terser input.js -o output.min.js -m keep_fnames=true,reserved=['$','jQuery']
常用子参数:
| 子参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
keep_fnames | 布尔 | false | 保留函数名(方便调试堆栈) |
keep_classnames | 布尔 | false | 保留类名 |
reserved | 数组 | [] | 指定不混淆的名称,如 reserved=['require','exports'] |
properties | 布尔 | false | 是否混淆属性名(obj.name → obj.a),极激进,可能破坏反射代码 |
示例:混淆全部,但保留 init 和 ajax 两个函数名不变:
terser app.js -o app.min.js -m reserved=['init','ajax']
5. 输出格式:--output 与 --comments
你已经知道 -o 指定输出文件。另外可以控制注释:
terser app.js -o app.min.js --comments false # 删掉所有注释 terser app.js -o app.min.js --comments /copyright/i # 保留含“copyright”的注释
6. Sourcemap:--source-map
生成 .map 文件,线上调试用。
基础用法
terser app.js -o app.min.js -m --source-map
默认生成 app.min.js.map。
指定 map 文件名
terser app.js -o app.min.js -m --source-map url=app.min.js.map
内联 sourcemap(把 map 放在文件末尾)
terser app.js -o app.min.js -m --source-map content=inline
7. 综合实战示例
场景1:开发调试(保留函数名,不删日志)
terser app.js -o app.debug.min.js -c -m keep_fnames=true --comments true
场景2:生产通用(两轮压缩,删掉所有 console)
terser app.js -o app.prod.min.js -c passes=2,drop_console=true -m
场景3:保留错误日志,只删 log/debug
terser app.js -o app.prod.min.js -c passes=2,pure_funcs=['console.log','console.debug'] -m
场景4:极致体积(三轮压缩 + 属性混淆,小心用)
terser app.js -o app.tiny.min.js -c passes=3,drop_console=true,unsafe=true -m properties=true
8. 查看帮助
记不住参数?随时敲:
terser --help
会列出所有可用选项,比你翻文档快。
解决 Element UI 自动完成组件下拉面板宽度固定导致文字截断的问题。通过 popper-class 和 CSS 实现下拉框最小宽度与输入框一致,同时根据内容自动撑开,确保所有选项完整显示。
1. 切换到C盘根目录打开终端cmd后,输入cd C:\(一定要加上后面的反斜扛)2.切换到C盘子目录打开终端cmd后,输入cd C:\dir1(切换到C盘下目录dir1)3.切换到其他盘根目录打开终...
介绍Windows操作系统下的DOS命令大全,并提供一些实用技巧,帮助读者更好地利用命令行和批处理功能,提高工作效率和技能。
本文介绍了在 CSS 中实现将 div 内容在垂直方向上居中显示的几种常见方法,包括使用 Flexbox 布局、Grid 布局、绝对定位与 transform 属性以及 display: table-cell 和 vertical-align 属性的应用。读者可以根据自己的项目需求和个人偏好选择适合的方法来实现垂直居中效果。
thinkphp框架设置sql-mode提高在mysql5.7的兼容性,我们可以在连接数据库执行SET SQL_MODE设置模型具体找到thinkphp\library\think\db\Connec...
ajax跨域访问是一个老问题了,解决方法很多,比较常用的是JSONP方法,JSONP方法是一种非官方方法,而且这种方法只支持GET方式,不如POST方式安全。即使使用jquery的jsonp方法,type设为POST,也会自动变为GET。官方问题说明:“script”: Evaluates the response as JavaScript and returns it as plain tex