一行命令压缩 JavaScript 代码

基于 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 则会出现异常。


© 2020