Rollup plugin to minify generated es bundle. Uses terser under the hood.
yarn add rollup-plugin-terser --dev
Note: this package requires [email protected] and higher (including [email protected])
import { rollup } from "rollup"; import { terser } from "rollup-plugin-terser"; rollup({ input: "main.js", plugins: [terser()] });
⚠️ Caveat: any function used in options object cannot rely on its surrounding scope, since it is executed in an isolated context.
terser(options);
options
- terser API options
Note: some terser options are set by the plugin automatically:
module: true
is set when format
is esm
or es
toplevel: true
is set when format
is cjs
options.sourcemap: boolean
Generates source maps and passes them to rollup. Defaults to true
.
options.numWorkers: number
Amount of workers to spawn. Defaults to the number of CPUs minus 1.
options.include: Array<string | RegExp> | string | RegExp
options.exclude: Array<string | RegExp> | string | RegExp
Specifically include/exclude chunk files names (minimatch pattern, or array of minimatch patterns), By default all chunk files will be minify.
// rollup.config.js import { terser } from "rollup-plugin-terser"; export default { input: "index.js", output: [ { file: "lib.js", format: "cjs" }, { file: "lib.min.js", format: "cjs", plugins: [terser()] }, { file: "lib.esm.js", format: "esm" } ] };
If you'd like that only some of the files will be minify, then you can filter by include
and exclude
to do this like so:
// rollup.config.js import { terser } from "rollup-plugin-terser"; export default { input: "index.js", output: [ { file: "lib.js", format: "cjs" }, { file: "lib.min.js", format: "cjs" }, { file: "lib.esm.js", format: "esm" }, { dir: ".", entryFileNames: "lib-[format].js", format: "iife" } ], plugins: [ terser({ include: [/^.+\.min\.js$/, "*esm*"], exclude: ["some*"] }) ] };
If you'd like to preserve comments (for licensing for example), then you can specify a function to do this like so:
terser({ output: { comments: function(node, comment) { var text = comment.value; var type = comment.type; if (type == "comment2") { // multiline comment return /@preserve|@license|@cc_on/i.test(text); } } } });
Alternatively, you can also choose to keep all comments (e.g. if a licensing header has already been prepended by a previous rollup plugin):
terser({ output: { comments: "all" } });
See Terser documentation for further reference.
MIT © Bogdan Chadkin