diff options
author | 2020-11-16 00:10:28 +0100 | |
---|---|---|
committer | 2020-11-16 00:10:28 +0100 | |
commit | e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d (patch) | |
tree | 55713f725f77b44ebfec86e4eec3ce33e71458ca /node_modules/terser-webpack-plugin/README.md | |
download | website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.tar.gz website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.tar.bz2 website_creator-e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d.zip |
api, login, auth
Diffstat (limited to 'node_modules/terser-webpack-plugin/README.md')
-rw-r--r-- | node_modules/terser-webpack-plugin/README.md | 731 |
1 files changed, 731 insertions, 0 deletions
diff --git a/node_modules/terser-webpack-plugin/README.md b/node_modules/terser-webpack-plugin/README.md new file mode 100644 index 0000000..dd80e46 --- /dev/null +++ b/node_modules/terser-webpack-plugin/README.md @@ -0,0 +1,731 @@ +<div align="center"> + <a href="https://github.com/webpack/webpack"> + <img width="200" height="200" src="https://webpack.js.org/assets/icon-square-big.svg"> + </a> +</div> + +[![npm][npm]][npm-url] +[![node][node]][node-url] +[![deps][deps]][deps-url] +[![tests][tests]][tests-url] +[![cover][cover]][cover-url] +[![chat][chat]][chat-url] +[![size][size]][size-url] + +# terser-webpack-plugin + +This plugin uses [terser](https://github.com/terser-js/terser) to minify your JavaScript. + +> ℹ️ For `webpack@3` use [terser-webpack-plugin-legacy](https://www.npmjs.com/package/terser-webpack-plugin-legacy) package + +## Getting Started + +To begin, you'll need to install `terser-webpack-plugin`: + +```console +$ npm install terser-webpack-plugin --save-dev +``` + +Then add the plugin to your `webpack` config. For example: + +**webpack.config.js** + +```js +const TerserPlugin = require('terser-webpack-plugin'); + +module.exports = { + optimization: { + minimizer: [new TerserPlugin()], + }, +}; +``` + +And run `webpack` via your preferred method. + +## Options + +### `test` + +Type: `String|RegExp|Array<String|RegExp>` +Default: `/\.m?js(\?.*)?$/i` + +Test to match files against. + +**webpack.config.js** + +```js +module.exports = { + optimization: { + minimizer: [ + new TerserPlugin({ + test: /\.js(\?.*)?$/i, + }), + ], + }, +}; +``` + +### `include` + +Type: `String|RegExp|Array<String|RegExp>` +Default: `undefined` + +Files to include. + +**webpack.config.js** + +```js +module.exports = { + optimization: { + minimizer: [ + new TerserPlugin({ + include: /\/includes/, + }), + ], + }, +}; +``` + +### `exclude` + +Type: `String|RegExp|Array<String|RegExp>` +Default: `undefined` + +Files to exclude. + +**webpack.config.js** + +```js +module.exports = { + optimization: { + minimizer: [ + new TerserPlugin({ + exclude: /\/excludes/, + }), + ], + }, +}; +``` + +### `chunkFilter` + +Type: `Function<(chunk) -> boolean>` +Default: `() => true` + +Allowing to filter which chunks should be uglified (by default all chunks are uglified). +Return `true` to uglify the chunk, `false` otherwise. + +**webpack.config.js** + +```js +module.exports = { + optimization: { + minimizer: [ + new TerserPlugin({ + chunkFilter: (chunk) => { + // Exclude uglification for the `vendor` chunk + if (chunk.name === 'vendor') { + return false; + } + + return true; + }, + }), + ], + }, +}; +``` + +### `cache` + +Type: `Boolean|String` +Default: `false` + +Enable file caching. +Default path to cache directory: `node_modules/.cache/terser-webpack-plugin`. + +> ℹ️ If you use your own `minify` function please read the `minify` section for cache invalidation correctly. + +#### `Boolean` + +Enable/disable file caching. + +**webpack.config.js** + +```js +module.exports = { + optimization: { + minimizer: [ + new TerserPlugin({ + cache: true, + }), + ], + }, +}; +``` + +#### `String` + +Enable file caching and set path to cache directory. + +**webpack.config.js** + +```js +module.exports = { + optimization: { + minimizer: [ + new TerserPlugin({ + cache: 'path/to/cache', + }), + ], + }, +}; +``` + +### `cacheKeys` + +Type: `Function<(defaultCacheKeys, file) -> Object>` +Default: `defaultCacheKeys => defaultCacheKeys` + +Allows you to override default cache keys. + +Default cache keys: + +```js +({ + terser: require('terser/package.json').version, // terser version + 'terser-webpack-plugin': require('../package.json').version, // plugin version + 'terser-webpack-plugin-options': this.options, // plugin options + path: compiler.outputPath ? `${compiler.outputPath}/${file}` : file, // asset path + hash: crypto + .createHash('md4') + .update(input) + .digest('hex'), // source file hash +}); +``` + +**webpack.config.js** + +```js +module.exports = { + optimization: { + minimizer: [ + new TerserPlugin({ + cache: true, + cacheKeys: (defaultCacheKeys, file) => { + defaultCacheKeys.myCacheKey = 'myCacheKeyValue'; + + return defaultCacheKeys; + }, + }), + ], + }, +}; +``` + +### `parallel` + +Type: `Boolean|Number` +Default: `false` + +Use multi-process parallel running to improve the build speed. +Default number of concurrent runs: `os.cpus().length - 1`. + +> ℹ️ Parallelization can speedup your build significantly and is therefore **highly recommended**. + +#### `Boolean` + +Enable/disable multi-process parallel running. + +**webpack.config.js** + +```js +module.exports = { + optimization: { + minimizer: [ + new TerserPlugin({ + parallel: true, + }), + ], + }, +}; +``` + +#### `Number` + +Enable multi-process parallel running and set number of concurrent runs. + +**webpack.config.js** + +```js +module.exports = { + optimization: { + minimizer: [ + new TerserPlugin({ + parallel: 4, + }), + ], + }, +}; +``` + +### `sourceMap` + +Type: `Boolean` +Default: `false` + +Use source maps to map error message locations to modules (this slows down the compilation). +If you use your own `minify` function please read the `minify` section for handling source maps correctly. + +> ⚠️ **`cheap-source-map` options don't work with this plugin**. + +**webpack.config.js** + +```js +module.exports = { + optimization: { + minimizer: [ + new TerserPlugin({ + sourceMap: true, + }), + ], + }, +}; +``` + +### `minify` + +Type: `Function` +Default: `undefined` + +Allows you to override default minify function. +By default plugin uses [terser](https://github.com/terser-js/terser) package. +Useful for using and testing unpublished versions or forks. + +> ⚠️ **Always use `require` inside `minify` function when `parallel` option enabled**. + +**webpack.config.js** + +```js +module.exports = { + optimization: { + minimizer: [ + new TerserPlugin({ + minify: (file, sourceMap) => { + const extractedComments = []; + + // Custom logic for extract comments + + const { error, map, code, warnings } = require('uglify-module') // Or require('./path/to/uglify-module') + .minify(file, { + /* Your options for minification */ + }); + + return { error, map, code, warnings, extractedComments }; + }, + }), + ], + }, +}; +``` + +### `terserOptions` + +Type: `Object` +Default: [default](https://github.com/terser-js/terser#minify-options) + +Terser minify [options](https://github.com/terser-js/terser#minify-options). + +**webpack.config.js** + +```js +module.exports = { + optimization: { + minimizer: [ + new TerserPlugin({ + terserOptions: { + ecma: undefined, + warnings: false, + parse: {}, + compress: {}, + mangle: true, // Note `mangle.properties` is `false` by default. + module: false, + output: null, + toplevel: false, + nameCache: null, + ie8: false, + keep_classnames: undefined, + keep_fnames: false, + safari10: false, + }, + }), + ], + }, +}; +``` + +### `extractComments` + +Type: `Boolean|String|RegExp|Function<(node, comment) -> Boolean|Object>|Object` +Default: `false` + +Whether comments shall be extracted to a separate file, (see [details](https://github.com/webpack/webpack/commit/71933e979e51c533b432658d5e37917f9e71595a)). +By default extract only comments using `/^\**!|@preserve|@license|@cc_on/i` regexp condition and remove remaining comments. +If the original file is named `foo.js`, then the comments will be stored to `foo.js.LICENSE`. +The `terserOptions.output.comments` option specifies whether the comment will be preserved, i.e. it is possible to preserve some comments (e.g. annotations) while extracting others or even preserving comments that have been extracted. + +#### `Boolean` + +Enable/disable extracting comments. + +**webpack.config.js** + +```js +module.exports = { + optimization: { + minimizer: [ + new TerserPlugin({ + extractComments: true, + }), + ], + }, +}; +``` + +#### `String` + +Extract `all` or `some` (use `/^\**!|@preserve|@license|@cc_on/i` RegExp) comments. + +**webpack.config.js** + +```js +module.exports = { + optimization: { + minimizer: [ + new TerserPlugin({ + extractComments: 'all', + }), + ], + }, +}; +``` + +#### `RegExp` + +All comments that match the given expression will be extracted to the separate file. + +**webpack.config.js** + +```js +module.exports = { + optimization: { + minimizer: [ + new TerserPlugin({ + extractComments: /@extract/i, + }), + ], + }, +}; +``` + +#### `Function<(node, comment) -> Boolean>` + +All comments that match the given expression will be extracted to the separate file. + +**webpack.config.js** + +```js +module.exports = { + optimization: { + minimizer: [ + new TerserPlugin({ + extractComments: (astNode, comment) => { + if (/@extract/i.test(comment.value)) { + return true; + } + + return false; + }, + }), + ], + }, +}; +``` + +#### `Object` + +Allow to customize condition for extract comments, specify extracted file name and banner. + +**webpack.config.js** + +```js +module.exports = { + optimization: { + minimizer: [ + new TerserPlugin({ + extractComments: { + condition: /^\**!|@preserve|@license|@cc_on/i, + filename: (file) => { + return `${file}.LICENSE`; + }, + banner: (licenseFile) => { + return `License information can be found in ${licenseFile}`; + }, + }, + }), + ], + }, +}; +``` + +##### `condition` + +Type: `Boolean|String|RegExp|Function<(node, comment) -> Boolean|Object>` + +Condition what comments you need extract. + +**webpack.config.js** + +```js +module.exports = { + optimization: { + minimizer: [ + new TerserPlugin({ + extractComments: { + condition: 'some', + filename: (file) => { + return `${file}.LICENSE`; + }, + banner: (licenseFile) => { + return `License information can be found in ${licenseFile}`; + }, + }, + }), + ], + }, +}; +``` + +##### `filename` + +Type: `String|Function<(string) -> String>` +Default: `${file}.LICENSE` + +The file where the extracted comments will be stored. +Default is to append the suffix `.LICENSE` to the original filename. + +**webpack.config.js** + +```js +module.exports = { + optimization: { + minimizer: [ + new TerserPlugin({ + extractComments: { + condition: /^\**!|@preserve|@license|@cc_on/i, + filename: 'extracted-comments.js', + banner: (licenseFile) => { + return `License information can be found in ${licenseFile}`; + }, + }, + }), + ], + }, +}; +``` + +##### `banner` + +Type: `Boolean|String|Function<(string) -> String>` +Default: `/*! For license information please see ${commentsFile} */` + +The banner text that points to the extracted file and will be added on top of the original file. +Can be `false` (no banner), a `String`, or a `Function<(string) -> String>` that will be called with the filename where extracted comments have been stored. +Will be wrapped into comment. + +**webpack.config.js** + +```js +module.exports = { + optimization: { + minimizer: [ + new TerserPlugin({ + extractComments: { + condition: true, + filename: (file) => { + return `${file}.LICENSE`; + }, + banner: (commentsFile) => { + return `My custom banner about license information ${commentsFile}`; + }, + }, + }), + ], + }, +}; +``` + +### `warningsFilter` + +Type: `Function<(warning, source) -> Boolean>` +Default: `() => true` + +Allow to filter [terser](https://github.com/terser-js/terser) warnings. +Return `true` to keep the warning, `false` otherwise. + +**webpack.config.js** + +```js +module.exports = { + optimization: { + minimizer: [ + new TerserPlugin({ + warningsFilter: (warning, source) => { + if (/Dropping unreachable code/i.test(warning)) { + return true; + } + + if (/filename\.js/i.test(source)) { + return true; + } + + return false; + }, + }), + ], + }, +}; +``` + +## Examples + +### Cache And Parallel + +Enable cache and multi-process parallel running. + +**webpack.config.js** + +```js +module.exports = { + optimization: { + minimizer: [ + new TerserPlugin({ + cache: true, + parallel: true, + }), + ], + }, +}; +``` + +### Preserve Comments + +Extract all legal comments (i.e. `/^\**!|@preserve|@license|@cc_on/i`) and preserve `/@license/i` comments. + +**webpack.config.js** + +```js +module.exports = { + optimization: { + minimizer: [ + new TerserPlugin({ + terserOptions: { + output: { + comments: /@license/i, + }, + }, + extractComments: true, + }), + ], + }, +}; +``` + +### Remove Comments + +If you avoid building with comments, set **terserOptions.output.comments** to **false** as in this config: + +**webpack.config.js** + +```js +module.exports = { + optimization: { + minimizer: [ + new TerserPlugin({ + terserOptions: { + output: { + comments: false, + }, + }, + }), + ], + }, +}; +``` + +### Custom Minify Function + +Override default minify function - use `uglify-js` for minification. + +**webpack.config.js** + +```js +module.exports = { + optimization: { + minimizer: [ + new TerserPlugin({ + // Uncomment lines below for cache invalidation correctly + // cache: true, + // cacheKeys: (defaultCacheKeys) => { + // delete defaultCacheKeys.terser; + // + // return Object.assign( + // {}, + // defaultCacheKeys, + // { 'uglify-js': require('uglify-js/package.json').version }, + // ); + // }, + minify: (file, sourceMap) => { + // https://github.com/mishoo/UglifyJS2#minify-options + const uglifyJsOptions = { + /* your `uglify-js` package options */ + }; + + if (sourceMap) { + uglifyJsOptions.sourceMap = { + content: sourceMap, + }; + } + + return require('uglify-js').minify(file, uglifyJsOptions); + }, + }), + ], + }, +}; +``` + +## Contributing + +Please take a moment to read our contributing guidelines if you haven't yet done so. + +[CONTRIBUTING](./.github/CONTRIBUTING.md) + +## License + +[MIT](./LICENSE) + +[npm]: https://img.shields.io/npm/v/terser-webpack-plugin.svg +[npm-url]: https://npmjs.com/package/terser-webpack-plugin +[node]: https://img.shields.io/node/v/terser-webpack-plugin.svg +[node-url]: https://nodejs.org +[deps]: https://david-dm.org/webpack-contrib/terser-webpack-plugin.svg +[deps-url]: https://david-dm.org/webpack-contrib/terser-webpack-plugin +[tests]: https://dev.azure.com/webpack-contrib/terser-webpack-plugin/_apis/build/status/webpack-contrib.terser-webpack-plugin?branchName=master +[tests-url]: https://dev.azure.com/webpack-contrib/terser-webpack-plugin/_build/latest?definitionId=7&branchName=master +[cover]: https://codecov.io/gh/webpack-contrib/terser-webpack-plugin/branch/master/graph/badge.svg +[cover-url]: https://codecov.io/gh/webpack-contrib/terser-webpack-plugin +[chat]: https://img.shields.io/badge/gitter-webpack%2Fwebpack-brightgreen.svg +[chat-url]: https://gitter.im/webpack/webpack +[size]: https://packagephobia.now.sh/badge?p=terser-webpack-plugin +[size-url]: https://packagephobia.now.sh/result?p=terser-webpack-plugin |