| # rollup-plugin-terser [![Travis Build Status][travis-img]][travis] |
| |
| [travis-img]: https://travis-ci.org/TrySound/rollup-plugin-terser.svg |
| [travis]: https://travis-ci.org/TrySound/rollup-plugin-terser |
| |
| [Rollup](https://github.com/rollup/rollup) plugin to minify generated es bundle. Uses [terser](https://github.com/fabiosantoscode/terser) under the hood. |
| |
| ## Install |
| |
| ```sh |
| yarn add rollup-plugin-terser --dev |
| # Or with npm: |
| npm i rollup-plugin-terser --save-dev |
| ``` |
| |
| _Note: this package requires rollup@0.66 and higher (including rollup@2.0.0)_ |
| |
| ## Usage |
| |
| ```js |
| import { rollup } from "rollup"; |
| import { terser } from "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. |
| |
| ```js |
| terser(options); |
| ``` |
| |
| `options` - [terser API options](https://github.com/fabiosantoscode/terser#minify-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 |
| |
| ```js |
| // 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" }, |
| ], |
| }; |
| ``` |
| |
| ### Comments |
| |
| If you'd like to preserve comments (for licensing for example), then you can specify a function to do this like so: |
| |
| ```js |
| 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): |
| |
| ```js |
| terser({ |
| output: { |
| comments: "all", |
| }, |
| }); |
| ``` |
| |
| See [Terser documentation](https://github.com/fabiosantoscode/terser#terser) for further reference. |
| |
| # License |
| |
| MIT © [Bogdan Chadkin](mailto:trysound@yandex.ru) |