Rollup plugin to minify generated es bundle. Uses terser under the hood.
yarn add rollup-plugin-terser --dev
Note: this package requires rollup@0.66 and higher (including rollup@1.0.0)
import { rollup } from "rollup";
import { terser } from "rollup-plugin-terser";
rollup({
input: "main.js",
plugins: [terser()]
});
- Module is a namespace. Default export often leads to function/component per file dogma and makes code less maintainable.
- Interop with commonjs is broken in many cases or hard to maintain.
- Show me any good language with default exports. It's historical javascriptism.
⚠️ 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
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.
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: 'es' },
{ 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