APIリファレンス
NPMによるインストールを前提とすると、Terserはアプリケーション内で次のようにロードできます。
const { minify } = require("terser");
または、
import { minify } from "terser";
ブラウザでのロードもサポートされています。`Terser`というグローバル変数が公開され、その中に`.minify`プロパティが含まれています。
<script src="https://cdn.jsdelivr.net/npm/source-map@0.7.3/dist/source-map.js"></script>
<script src="https://cdn.jsdelivr.net/npm/terser/dist/bundle.min.js"></script>
非同期の高レベル関数**`async minify(code, options)`**があり、すべての縮小フェーズを構成可能な方法で実行します。デフォルトでは、`minify()`は`compress`と`mangle`を有効にします。例:
var code = "function add(first, second) { return first + second; }";
var result = await minify(code, { sourceMap: true });
console.log(result.code);  // minified output: function add(n,d){return n+d}
console.log(result.map);  // source map
すぐに結果を返す`minify_sync()`という代替バージョンもあります。
最初の引数にオブジェクトを使用することで、複数のJavaScriptファイルを一度にminifyできます。キーはファイル名、値はソースコードとなります。
var code = {
    "file1.js": "function add(first, second) { return first + second; }",
    "file2.js": "console.log(add(1 + 2, 3 + 4));"
};
var result = await minify(code);
console.log(result.code);
// function add(d,n){return d+n}console.log(add(3,7));
`toplevel`オプション
var code = {
    "file1.js": "function add(first, second) { return first + second; }",
    "file2.js": "console.log(add(1 + 2, 3 + 4));"
};
var options = { toplevel: true };
var result = await minify(code, options);
console.log(result.code);
// console.log(3+7);
`nameCache`オプション
var options = {
    mangle: {
        toplevel: true,
    },
    nameCache: {}
};
var result1 = await minify({
    "file1.js": "function add(first, second) { return first + second; }"
}, options);
var result2 = await minify({
    "file2.js": "console.log(add(1 + 2, 3 + 4));"
}, options);
console.log(result1.code);
// function n(n,r){return n+r}
console.log(result2.code);
// console.log(n(3,7));
名前キャッシュを次のようにファイルシステムに保存できます。
var cacheFileName = "/tmp/cache.json";
var options = {
    mangle: {
        properties: true,
    },
    nameCache: JSON.parse(fs.readFileSync(cacheFileName, "utf8"))
};
fs.writeFileSync("part1.js", await minify({
    "file1.js": fs.readFileSync("file1.js", "utf8"),
    "file2.js": fs.readFileSync("file2.js", "utf8")
}, options).code, "utf8");
fs.writeFileSync("part2.js", await minify({
    "file3.js": fs.readFileSync("file3.js", "utf8"),
    "file4.js": fs.readFileSync("file4.js", "utf8")
}, options).code, "utf8");
fs.writeFileSync(cacheFileName, JSON.stringify(options.nameCache), "utf8");
`minify()`オプションの組み合わせの例
var code = {
    "file1.js": "function add(first, second) { return first + second; }",
    "file2.js": "console.log(add(1 + 2, 3 + 4));"
};
var options = {
    toplevel: true,
    compress: {
        global_defs: {
            "@console.log": "alert"
        },
        passes: 2
    },
    format: {
        preamble: "/* minified */"
    }
};
var result = await minify(code, options);
console.log(result.code);
// /* minified */
// alert(10);"
エラーの例
try {
    const result = await minify({"foo.js" : "if (0) else console.log(1);"});
    // Do something with result
} catch (error) {
    const { message, filename, line, col, pos } = error;
    // Do something with error
}
Minifyオプション
- 
ecma(デフォルト `undefined`) - `compress`と`format`の`ecma`オプションを上書きするには、`5`、`2015`、`2016`などを渡します。
- 
enclose(デフォルト `false`) - `true`、または`"args[:values]"`形式の文字列(`args`と`values`はそれぞれコンマ区切りの引数名と値)を渡して、構成可能な引数と値を持つ大きな関数に結果を埋め込みます。
- 
parse(デフォルト `{}`) - 追加のparseオプションを指定する場合は、オブジェクトを渡します。
- 
compress(デフォルト `{}`) - 圧縮を完全にスキップするには`false`を渡します。カスタムcompressオプションを指定するには、オブジェクトを渡します。
- 
mangle(デフォルト `true`) - 名前の変更をスキップするには`false`を渡します。または、mangleオプションを指定するにはオブジェクトを渡します(下記参照)。- mangle.properties(デフォルト `false`) - mangleオプションのサブカテゴリです。カスタムmangleプロパティオプションを指定するには、オブジェクトを渡します。
 
- 
module(デフォルト `false`) - ES6モジュールを縮小する際に使用します。"use strict"が暗黙的に適用され、トップレベルスコープで名前の変更が行われます。`compress`または`mangle`が有効な場合、`toplevel`オプションも有効になります。
- 
formatまたはoutput(デフォルト `null`) - 追加のformatオプションを指定する場合は、オブジェクトを渡します。デフォルトは最適な圧縮のために最適化されています。
- 
sourceMap(デフォルト `false`) - ソースマップオプションを指定する場合は、オブジェクトを渡します。
- 
toplevel(デフォルト `false`) - トップレベルの変数と関数の名前の変更を有効にし、使用されていない変数と関数を削除する場合は`true`に設定します。
- 
nameCache(デフォルト `null`) - 変更された変数とプロパティ名を`minify()`の複数回呼び出し間でキャッシュする場合は、空のオブジェクト`{}`または以前に使用した`nameCache`オブジェクトを渡します。注:これは読み書き可能なプロパティです。`minify()`はこのオブジェクトの名前キャッシュの状態を読み取り、縮小中に更新して、ユーザーが再利用または外部で永続化できるようにします。
- 
ie8(デフォルト `false`) - IE8をサポートするには`true`に設定します。
- 
keep_classnames(デフォルト: `undefined`) - クラス名の破棄または変更を防ぐには`true`を渡します。その正規表現に一致するクラス名のみを保持するには、正規表現を渡します。
- 
keep_fnames(デフォルト: `false`) - 関数名の破棄または変更を防ぐには`true`を渡します。その正規表現に一致する関数名のみを保持するには、正規表現を渡します。`Function.prototype.name`に依存するコードに役立ちます。トップレベルのminifyオプション`keep_classnames`が`undefined`の場合、トップレベルのminifyオプション`keep_fnames`の値で上書きされます。
- 
safari10(デフォルト: `false`) - ループスコープと`await`のSafari 10/11のバグに対処するには`true`を渡します。`mangle`と`format`の`safari10`オプションの詳細については、を参照してください。
Minifyオプションの構造
{
    parse: {
        // parse options
    },
    compress: {
        // compress options
    },
    mangle: {
        // mangle options
        properties: {
            // mangle property options
        }
    },
    format: {
        // format options (can also use `output` for backwards compatibility)
    },
    sourceMap: {
        // source map options
    },
    ecma: 5, // specify one of: 5, 2015, 2016, etc.
    enclose: false, // or specify true, or "args:values"
    keep_classnames: false,
    keep_fnames: false,
    ie8: false,
    module: false,
    nameCache: null, // or specify a name cache object
    safari10: false,
    toplevel: false
}
ソースマップオプション
ソースマップを生成するには
var result = await minify({"file1.js": "var a = function() {};"}, {
    sourceMap: {
        filename: "out.js",
        url: "out.js.map"
    }
});
console.log(result.code); // minified output
console.log(result.map);  // source map
ソースマップはファイルに保存されず、`result.map`で返されることに注意してください。`sourceMap.url`に渡された値は、`result.code`に`//# sourceMappingURL=out.js.map`を設定するためにのみ使用されます。`filename`の値は、ソースマップファイルの`file`属性([仕様][sm-spec]参照)を設定するためにのみ使用されます。
`sourceMap.url`オプションを`"inline"`に設定すると、ソースマップがコードに追加されます。
sourceRootプロパティをソースマップに含めることも指定できます。
var result = await minify({"file1.js": "var a = function() {};"}, {
    sourceMap: {
        root: "http://example.com/src",
        url: "out.js.map"
    }
});
コンパイル済みJavaScriptを圧縮していて、そのソースマップがある場合は、`sourceMap.content`を使用できます。
var result = await minify({"compiled.js": "compiled code"}, {
    sourceMap: {
        content: "content from compiled.js.map",
        url: "minified.js.map"
    }
});
// same as before, it returns `code` and `map`
`X-SourceMap`ヘッダーを使用している場合は、`sourceMap.url`を省略できます。
生のオブジェクトとしてソースマップが必要な場合は、`sourceMap.asObject`を`true`に設定します。