Irina Glushko 2389e7160b HW1 done | 3 years ago | |
---|---|---|
.. | ||
node_modules | 3 years ago | |
LICENSE | 3 years ago | |
README.md | 3 years ago | |
index.d.ts | 3 years ago | |
index.js | 3 years ago | |
package.json | 3 years ago | |
transform.js | 3 years ago |
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()]
});
⚠️ 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