基于 npx 和 terser,一行命令压缩 JavaScript 代码,支持字符串输入输出、文件输入输出,支持 ESNext 新特性,适合生成简单酷炫的小脚本时使用。
文件输入
用于对已有的 JavaScript 文件进行压缩。
-
将 input.js 压缩后,展示到控制台:
$ npx terser -mc ecma=8,unsafe,unsafe_arrows,keep_fargs=false -- input.js
-
将 input.js 压缩后,保存到 output.js:
$ npx terser -mc ecma=8,unsafe,unsafe_arrows,keep_fargs=false -o output.js -- input.js
pipe
基于 stdio 进行数据处理,可以方便地与其他命令行工具相结合,适合处理远程文件或打造工具链时使用。
-
从 stdin 读取数据,然后 pipe 到 terser:
$ cat input.js | npx terser -mc ecma=8,unsafe,unsafe_arrows,keep_fargs=false
-
从 stdin 读取数据,经过 terser 压缩后保存到 output.js:
$ cat input.js | npx terser -mc ecma=8,unsafe,unsafe_arrows,keep_fargs=false -o output.js # or $ cat input.js | npx terser -mc ecma=8,unsafe,unsafe_arrows,keep_fargs=false > output.js
Vim 中使用
在 Vim 中可以通过一行命令将当前 buffer 中的 JavaScript 代码进行压缩:
:%!npx -q terser -mc ecma=8,unsafe,unsafe_arrows,keep_fargs=false
参数说明
-m
,--mangle
-
-c
,--compress
压缩代码,后面传入更多的压缩选项,
,
分隔。ecma=8
,允许使用 ES8 语法,如果有等价的新语法可以更短,则替换。-
unsafe
,启用一些不安全的压缩转换,如new Object()
→{}
。注:一些边缘场景下可能会导致代码和预期不一致,详见文档。
-
unsafe_arrows
,当普通function
内部没有使用this
时,则转换成箭头函数。注:如果代码依赖了
fn.prototype
则会出现异常。 -
keep_fargs=false
,将函数的参数中注:如果代码依赖了
fn.length
则会出现异常。