Skip to content

Rollup plugin to minify generated bundle (forked from Bogdan Chadkin repository)

License

Notifications You must be signed in to change notification settings

el3um4s/rollup-plugin-terser

Repository files navigation

Rollup Plugin Terser

Rollup plugin to minify generated bundle (forked from Bogdan Chadkin repository)

Rollup plugin to minify generated es bundle. Uses terser under the hood.

Install

npm i @el3um4s/rollup-plugin-terser --save-dev

Note: this package requires rollup@0.66 and higher (including rollup@3.0.0)

Usage

import { rollup } from "rollup";
import { terser } from "@el3um4s/rollup-plugin-terser";

rollup({
  input: "main.js",
  plugins: [terser()],
});

Why named export?

  1. Module is a namespace. Default export often leads to function/component per file dogma and makes code less maintainable.
  2. Interop with commonjs is broken in many cases or hard to maintain.
  3. Show me any good language with default exports. It's historical javascriptism.

Options

⚠️ 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.numWorkers: number

Amount of workers to spawn. Defaults to the number of CPUs minus 1.

Examples

Using as output plugin

// rollup.config.js
import { terser } from "@el3um4s/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" },
  ],
};

Comments

If you'd like to preserve comments (for licensing for example), then you can specify a function to do this like so:

terser({
  format: {
    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({
  format: {
    comments: "all",
  },
});

See Terser documentation for further reference.

About

Rollup plugin to minify generated bundle (forked from Bogdan Chadkin repository)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published