diff --git a/README.md b/README.md index 9b18f5f9..badc740c 100644 --- a/README.md +++ b/README.md @@ -1,117 +1,196 @@ [![npm][npm]][npm-url] +[![node][node]][node-url] [![deps][deps]][deps-url] [![test][test]][test-url] [![coverage][cover]][cover-url] -[![quality][quality]][quality-url] [![chat][chat]][chat-url] +
- -

UglifyJS Webpack Plugin

-

This plugin uses UglifyJS v2 to minify your JavaScript.

+

This plugin uses UglifyJS v3 to minify your JavaScript

-> Note that webpack contains the same plugin under `webpack.optimize.UglifyJsPlugin`. This is a standalone version for those that want to control the version of UglifyJS. The documentation is valid apart from the installation instructions in that case. +> ℹ️ webpack contains the same plugin under `webpack.optimize.UglifyJsPlugin`. The documentation is valid apart from the installation instructions

Install

-With [Yarn](https://yarnpkg.com): - -```bash -yarn add uglifyjs-webpack-plugin --dev -``` - -With npm: - ```bash -npm install uglifyjs-webpack-plugin --save-dev +npm i -D uglifyjs-webpack-plugin ```

Usage

-```javascript -const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); +**webpack.config.js** +```js +const UglifyJSPlugin = require('uglifyjs-webpack-plugin') module.exports = { - entry: {...}, - output: {...}, - module: {...}, plugins: [ - new UglifyJsPlugin() + new UglifyJSPlugin() ] -}; +} ```

Options

-This plugin supports UglifyJS features as discussed below: - -| Property | Type | Default | Description | -| --- | --- | --- | --- | -| compress | boolean, object | true | See [UglifyJS documentation](http://lisperator.net/uglifyjs/compress). | -| mangle | boolean, object | true | See below. | -| beautify | boolean | false | Beautify output. | -| output | An object providing options for UglifyJS [OutputStream](https://github.com/mishoo/UglifyJS2/blob/v2.x/lib/output.js) | | Lower level access to UglifyJS output. | -| comments | boolean, RegExp, function(astNode, comment) -> boolean | Defaults to preserving comments containing `/*!`, `/**!`, `@preserve` or `@license`. | Comment related configuration. | -| extractComments | boolean, RegExp, function (astNode, comment) -> boolean, object | false | Whether comments shall be extracted to a separate file, (see [details](https://github.com/webpack/webpack/commit/71933e979e51c533b432658d5e37917f9e71595a), since webpack 2.3.0) | -| sourceMap | boolean | false | Use SourceMaps to map error message locations to modules. This slows down the compilation. **Important!** `cheap` source map options don't work with the plugin! | -| test | RegExp, Array | /\.js($|\?)/i | Test to match files against. | -| include | RegExp, Array | | Test only `include` files. | -| exclude | RegExp, Array | | Files to `exclude` from testing. | -| warningsFilter | function(source) -> boolean | | Allow to filter uglify warnings (since webpack 2.3.0) | -| parallel | boolean, object | false | Use multi-process parallel running and file cache to improve the build speed. | - -

Mangling

- -`mangle (boolean|object)` - Passing `true` or an object enables and provides options for UglifyJS name mangling. See [UglifyJS documentation](https://github.com/mishoo/UglifyJS2/tree/v2.x#mangle) for mangle options. Example configuration, this will **not** mangle properties (see below): - -```javascript -new UglifyJsPlugin({ - mangle: { - // Skip mangling these - except: ['$super', '$', 'exports', 'require'] - } -}) +|Name|Type|Default|Description| +|:--:|:--:|:-----:|:----------| +|**`test`**|`{RegExp\|Array}`| /\.js($|\?)/i|Test to match files against| +|**`include`**|`{RegExp\|Array}`|`undefined`|Files to `include`| +|**`exclude`**|`{RegExp\|Array}`|`undefined`|Files to `exclude`| +|**`parallel`**|`{Boolean\|Object}`|`false`|Use multi-process parallel running and file cache to improve the build speed| +|**`sourceMap`**|`{Boolean}`|`false`|Use source maps to map error message locations to modules (This slows down the compilation) ⚠️ **`cheap-source-map` options don't work with this plugin**| +|**`uglifyOptions`**|`{Object}`|[`{...defaults}`](https://github.com/webpack-contrib/uglifyjs-webpack-plugin/tree/master#uglifyoptions)|`uglify` [Options](https://github.com/mishoo/UglifyJS2/tree/harmony#minify-options)| +|**`extractComments`**|`{Boolean\|RegExp\|Function<(node, comment) -> {Boolean\|Object}>}`|`false`|Whether comments shall be extracted to a separate file, (see [details](https://github.com/webpack/webpack/commit/71933e979e51c533b432658d5e37917f9e71595a) (`webpack >= 2.3.0`)| +|**`warningsFilter`**|`{Function(source) -> {Boolean}}`|``|Allow to filter uglify warnings| + +### `test` + +**webpack.config.js** +```js +[ + new UglifyJSPlugin({ + test: /\.js($|\?)/i + }) +] +``` + +### `include` + +**webpack.config.js** +```js +[ + new UglifyJSPlugin({ + include: /\/includes/ + }) +] ``` -`mangle.props (boolean|object)` - Passing `true` or an object enables and provides options for UglifyJS property mangling - see [UglifyJS documentation](https://github.com/mishoo/UglifyJS2/tree/v2.x#mangleproperties-options) for mangleProperties options. +### `exclude` + +**webpack.config.js** +```js +[ + new UglifyJSPlugin({ + exclude: /\/excludes/ + }) +] +``` -> Note: the UglifyJS docs warn that [you will probably break your source if you use property mangling](https://github.com/mishoo/UglifyJS2/tree/v2.x#mangling-property-names---mangle-props), so if you aren’t sure why you’d need this feature, you most likely shouldn’t be using it! This is **not** enabled by default. +### `parallel` -Example configuration, this will mangle both names and properties: +**webpack.config.js** +```js +[ + new UglifyJSPlugin({ + parallel: true + }) +] +``` -```javascript -new UglifyJsPlugin({ - mangle: { - props: true - } -}) +|Name|Type|Default|Description| +|:--:|:--:|:-----:|:----------| +|**`cache`**|`{Boolean}`|`node_modules/.cache/uglifyjs-webpack-plugin`|Enable file caching| +|**`workers`**|`{Boolean\|Object}`|`os.cpus().length - 1`|Number of concurrent runs, default is the `maximum`| + +**webpack.config.js** +```js +[ + new UglifyJSPlugin({ + parallel: { + cache: true + workers: 2 // for e.g + } + }) +] ``` -

Extracting Comments

+> ℹ️ Parallelization can speedup your build significantly and is therefore **highly recommended** -The `extractComments` option can be -- `true`: All comments that normally would be preserved by the `comments` option will be moved to a separate file. If the original file is named `foo.js`, then the comments will be stored to `foo.js.LICENSE` -- regular expression (given as `RegExp` or `string`) or a `function (astNode, comment) -> boolean`: - All comments that match the given expression (resp. are evaluated to `true` by the function) will be extracted to the separate file. The `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. -- an `object` consisting of the following keys, all optional: - - `condition`: regular expression or function (see previous point) - - `filename`: The file where the extracted comments will be stored. Can be either a `string` or `function (string) -> string` which will be given the original filename. Default is to append the suffix `.LICENSE` to the original filename. - - `banner`: The banner text that points to the extracted file and will be added on top of the original file. will be added to 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. -Default: `/*! For license information please see foo.js.LICENSE */` +### `sourceMap` + +**webpack.config.js** +```js +[ + new UglifyJSPlugin({ + sourceMap: true + }) +] +``` + +> ⚠️ **`cheap-source-map` options don't work with this plugin** + +### [`uglifyOptions`](https://github.com/mishoo/UglifyJS2/tree/harmony#minify-options) + +|Name|Type|Default|Description| +|:--:|:--:|:-----:|:----------| +|**`ie8`**|`{Boolean}`|`false`|Enable IE8 Support| +|**`ecma`**|`{Number}`|`undefined`|Supported ECMAScript Version (`5`, `6`, `7` or `8`). Affects `parse`, `compress` && `output` options| +|**[`parse`](https://github.com/mishoo/UglifyJS2/tree/harmony#parse-options)**|`{Object}`|`{}`|Additional Parse Options| +|**[`mangle`](https://github.com/mishoo/UglifyJS2/tree/harmony#mangle-options)**|`{Boolean\|Object}`|`true`|Enable Name Mangling (See [Mangle Properties](https://github.com/mishoo/UglifyJS2/tree/harmony#mangle-properties-options) for advanced setups, use with ⚠️)| +|**[`output`](https://github.com/mishoo/UglifyJS2/tree/harmony#output-options)**|`{Object}`|`{}`|Additional Output Options (The defaults are optimized for best compression)| +|**[`compress`](https://github.com/mishoo/UglifyJS2/tree/harmony#compress-options)**|`{Boolean\|Object}`|`true`|Additional Compress Options| +|**`warnings`**|`{Boolean}`|`false`|Display Warnings| + +**webpack.config.js** +```js +[ + new UglifyJSPlugin({ + uglifyOptions: { + ie8: false, + ecma: 8, + parse: {...options}, + mangle: { + ...options, + properties: { + // mangle property options + } + }, + output: { + comments: false, + beautify: false, + ...options + }, + compress: {...options}, + warnings: false + } + }) +] +``` -

Run in parallel

+### `extractComments` -The `parallel` option can be +**`{Boolean}`** -- `true`: Enable multi-process parallel running with file cache -- an `object` consisting of the following keys, all optional: - - `workers`: The maximum number of concurrent runs. If it is `true`, it is equal to `require('os').cpus().length - 1`. - - `cache`: Enable file caching. If it is `true`, it is equal to `"node_modules/.cache/uglifyjs-webpack-plugin"`. +All comments that normally would be preserved by the `comments` option will be moved to a separate file. If the original file is named `foo.js`, then the comments will be stored to `foo.js.LICENSE` + +**`{RegExp|String}` or `{Function<(node, comment) -> {Boolean}>}`** + +All comments that match the given expression (resp. are evaluated to `true` by the function) will be extracted to the separate file. The `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. + +**`{Object}`** + +|Name|Type|Default|Description| +|:--:|:--:|:-----:|:----------| +|**`condition`**|`{Regex\|Function}`|``|Regular Expression or function (see previous point)| +|**`filename`**|`{String\|Function}`|`compilation.assets[file]`|The file where the extracted comments will be stored. Can be either a `{String}` or a `{Function<(string) -> {String}>}`, which will be given the original filename. Default is to append the suffix `.LICENSE` to the original filename| +|**`banner`**|`{Boolean\|String\|Function}`|`/*! For license information please see ${filename}.js.LICENSE */`|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| + +### `warningsFilter` + +**webpack.config.js** +```js +[ + new UglifyJsPlugin({ + warningsFilter: (src) => true + }) +] +```

Maintainers

@@ -119,28 +198,39 @@ The `parallel` option can be - -
- Juho Vepsäläinen + + +
+ Steven Hargrove +
- -
- Joshua Wiens + + +
+ Juho Vepsäläinen +
- -
- Kees Kluskens + + +
+ Joshua Wiens +
- -
- Sean Larkin + + +
+ Michael Ciniawsky +
+ + + + +
+ Alexander Krasnoyarov +
@@ -150,17 +240,17 @@ The `parallel` option can be [npm]: https://img.shields.io/npm/v/uglifyjs-webpack-plugin.svg [npm-url]: https://npmjs.com/package/uglifyjs-webpack-plugin +[node]: https://img.shields.io/node/v/uglifyjs-webpack-plugin.svg +[node-url]: https://nodejs.org + [deps]: https://david-dm.org/webpack-contrib/uglifyjs-webpack-plugin.svg [deps-url]: https://david-dm.org/webpack-contrib/uglifyjs-webpack-plugin -[chat]: https://img.shields.io/badge/gitter-webpack%2Fwebpack-brightgreen.svg -[chat-url]: https://gitter.im/webpack/webpack - [test]: https://secure.travis-ci.org/webpack-contrib/uglifyjs-webpack-plugin.svg [test-url]: http://travis-ci.org/webpack-contrib/uglifyjs-webpack-plugin [cover]: https://codecov.io/gh/webpack-contrib/uglifyjs-webpack-plugin/branch/master/graph/badge.svg [cover-url]: https://codecov.io/gh/webpack-contrib/uglifyjs-webpack-plugin -[quality]: https://www.bithound.io/github/webpack-contrib/uglifyjs-webpack-plugin/badges/score.svg -[quality-url]: https://www.bithound.io/github/webpack-contrib/uglifyjs-webpack-plugin +[chat]: https://img.shields.io/badge/gitter-webpack%2Fwebpack-brightgreen.svg +[chat-url]: https://gitter.im/webpack/webpack