{"id":13451903,"url":"https://github.com/webpack-contrib/terser-webpack-plugin","last_synced_at":"2025-05-13T20:05:01.151Z","repository":{"id":32809917,"uuid":"143057914","full_name":"webpack-contrib/terser-webpack-plugin","owner":"webpack-contrib","description":"Terser Plugin","archived":false,"fork":false,"pushed_at":"2025-03-06T18:10:21.000Z","size":7893,"stargazers_count":1959,"open_issues_count":8,"forks_count":159,"subscribers_count":19,"default_branch":"master","last_synced_at":"2025-04-22T13:01:42.978Z","etag":null,"topics":["minify","minimizer","terser","uglify","webpack","webpack-plugin"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/webpack-contrib.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"open_collective":"webpack"}},"created_at":"2018-07-31T19:25:19.000Z","updated_at":"2025-04-21T09:13:32.000Z","dependencies_parsed_at":"2023-12-05T05:27:56.587Z","dependency_job_id":"b89983c2-09cc-4119-820e-93501c949969","html_url":"https://github.com/webpack-contrib/terser-webpack-plugin","commit_stats":{"total_commits":341,"total_committers":36,"mean_commits":9.472222222222221,"dds":0.6041055718475073,"last_synced_commit":"6eebdf76b5d172cb226fc7f061a89e58d9c17425"},"previous_names":[],"tags_count":82,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webpack-contrib%2Fterser-webpack-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webpack-contrib%2Fterser-webpack-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webpack-contrib%2Fterser-webpack-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webpack-contrib%2Fterser-webpack-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/webpack-contrib","download_url":"https://codeload.github.com/webpack-contrib/terser-webpack-plugin/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251219825,"owners_count":21554455,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["minify","minimizer","terser","uglify","webpack","webpack-plugin"],"created_at":"2024-07-31T07:01:06.413Z","updated_at":"2025-05-06T01:47:29.742Z","avatar_url":"https://github.com/webpack-contrib.png","language":"JavaScript","readme":"\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/webpack/webpack\"\u003e\n    \u003cimg width=\"200\" height=\"200\" src=\"https://webpack.js.org/assets/icon-square-big.svg\"\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n[![npm][npm]][npm-url]\n[![node][node]][node-url]\n[![tests][tests]][tests-url]\n[![cover][cover]][cover-url]\n[![discussion][discussion]][discussion-url]\n[![size][size]][size-url]\n\n# terser-webpack-plugin\n\nThis plugin uses [terser](https://github.com/terser/terser) to minify/minimize your JavaScript.\n\n## Getting Started\n\nWebpack v5 comes with the latest `terser-webpack-plugin` out of the box. If you are using Webpack v5 or above and wish to customize the options, you will still need to install `terser-webpack-plugin`. Using Webpack v4, you have to install `terser-webpack-plugin` v4.\n\nTo begin, you'll need to install `terser-webpack-plugin`:\n\n```console\nnpm install terser-webpack-plugin --save-dev\n```\n\nor\n\n```console\nyarn add -D terser-webpack-plugin\n```\n\nor\n\n```console\npnpm add -D terser-webpack-plugin\n```\n\nThen add the plugin to your `webpack` config. For example:\n\n**webpack.config.js**\n\n```js\nconst TerserPlugin = require(\"terser-webpack-plugin\");\n\nmodule.exports = {\n  optimization: {\n    minimize: true,\n    minimizer: [new TerserPlugin()],\n  },\n};\n```\n\nAnd run `webpack` via your preferred method.\n\n## Note about source maps\n\n**Works only with `source-map`, `inline-source-map`, `hidden-source-map` and `nosources-source-map` values for the [`devtool`](https://webpack.js.org/configuration/devtool/) option.**\n\nWhy?\n\n- `eval` wraps modules in `eval(\"string\")` and the minimizer does not handle strings.\n- `cheap` has not column information and minimizer generate only a single line, which leave only a single mapping.\n\nUsing supported `devtool` values enable source map generation.\n\n## Options\n\n- **[`test`](#test)**\n- **[`include`](#include)**\n- **[`exclude`](#exclude)**\n- **[`parallel`](#parallel)**\n- **[`minify`](#minify)**\n- **[`terserOptions`](#terseroptions)**\n- **[`extractComments`](#extractcomments)**\n\n### `test`\n\nType:\n\n```ts\ntype test = string | RegExp | Array\u003cstring | RegExp\u003e;\n```\n\nDefault: `/\\.m?js(\\?.*)?$/i`\n\nTest to match files against.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n  optimization: {\n    minimize: true,\n    minimizer: [\n      new TerserPlugin({\n        test: /\\.js(\\?.*)?$/i,\n      }),\n    ],\n  },\n};\n```\n\n### `include`\n\nType:\n\n```ts\ntype include = string | RegExp | Array\u003cstring | RegExp\u003e;\n```\n\nDefault: `undefined`\n\nFiles to include.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n  optimization: {\n    minimize: true,\n    minimizer: [\n      new TerserPlugin({\n        include: /\\/includes/,\n      }),\n    ],\n  },\n};\n```\n\n### `exclude`\n\nType:\n\n```ts\ntype exclude = string | RegExp | Array\u003cstring | RegExp\u003e;\n```\n\nDefault: `undefined`\n\nFiles to exclude.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n  optimization: {\n    minimize: true,\n    minimizer: [\n      new TerserPlugin({\n        exclude: /\\/excludes/,\n      }),\n    ],\n  },\n};\n```\n\n### `parallel`\n\nType:\n\n```ts\ntype parallel = boolean | number;\n```\n\nDefault: `true`\n\nUse multi-process parallel running to improve the build speed.\nDefault number of concurrent runs: `os.cpus().length - 1` or `os.availableParallelism() - 1` (if this function is supported).\n\n\u003e **Note**\n\u003e\n\u003e Parallelization can speedup your build significantly and is therefore **highly recommended**.\n\n\u003e **Warning**\n\u003e\n\u003e If you use **Circle CI** or any other environment that doesn't provide real available count of CPUs then you need to setup explicitly number of CPUs to avoid `Error: Call retries were exceeded` (see [#143](https://github.com/webpack-contrib/terser-webpack-plugin/issues/143), [#202](https://github.com/webpack-contrib/terser-webpack-plugin/issues/202)).\n\n#### `boolean`\n\nEnable/disable multi-process parallel running.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n  optimization: {\n    minimize: true,\n    minimizer: [\n      new TerserPlugin({\n        parallel: true,\n      }),\n    ],\n  },\n};\n```\n\n#### `number`\n\nEnable multi-process parallel running and set number of concurrent runs.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n  optimization: {\n    minimize: true,\n    minimizer: [\n      new TerserPlugin({\n        parallel: 4,\n      }),\n    ],\n  },\n};\n```\n\n### `minify`\n\nType:\n\n```ts\ntype minify = (\n  input: {\n    [file: string]: string;\n  },\n  sourceMap: import(\"@jridgewell/trace-mapping\").SourceMapInput | undefined,\n  minifyOptions: {\n    module?: boolean | undefined;\n    ecma?: import(\"terser\").ECMA | undefined;\n  },\n  extractComments:\n    | boolean\n    | \"all\"\n    | \"some\"\n    | RegExp\n    | ((\n        astNode: any,\n        comment: {\n          value: string;\n          type: \"comment1\" | \"comment2\" | \"comment3\" | \"comment4\";\n          pos: number;\n          line: number;\n          col: number;\n        }\n      ) =\u003e boolean)\n    | {\n        condition?:\n          | boolean\n          | \"all\"\n          | \"some\"\n          | RegExp\n          | ((\n              astNode: any,\n              comment: {\n                value: string;\n                type: \"comment1\" | \"comment2\" | \"comment3\" | \"comment4\";\n                pos: number;\n                line: number;\n                col: number;\n              }\n            ) =\u003e boolean)\n          | undefined;\n        filename?: string | ((fileData: any) =\u003e string) | undefined;\n        banner?:\n          | string\n          | boolean\n          | ((commentsFile: string) =\u003e string)\n          | undefined;\n      }\n    | undefined\n) =\u003e Promise\u003c{\n  code: string;\n  map?: import(\"@jridgewell/trace-mapping\").SourceMapInput | undefined;\n  errors?: (string | Error)[] | undefined;\n  warnings?: (string | Error)[] | undefined;\n  extractedComments?: string[] | undefined;\n}\u003e;\n```\n\nDefault: `TerserPlugin.terserMinify`\n\nAllows you to override default minify function.\nBy default plugin uses [terser](https://github.com/terser/terser) package.\nUseful for using and testing unpublished versions or forks.\n\n\u003e **Warning**\n\u003e\n\u003e **Always use `require` inside `minify` function when `parallel` option enabled**.\n\n**webpack.config.js**\n\n```js\n// Can be async\nconst minify = (input, sourceMap, minimizerOptions, extractsComments) =\u003e {\n  // The `minimizerOptions` option contains option from the `terserOptions` option\n  // You can use `minimizerOptions.myCustomOption`\n\n  // Custom logic for extract comments\n  const { map, code } = require(\"uglify-module\") // Or require('./path/to/uglify-module')\n    .minify(input, {\n      /* Your options for minification */\n    });\n\n  return { map, code, warnings: [], errors: [], extractedComments: [] };\n};\n\n// Used to regenerate `fullhash`/`chunkhash` between different implementation\n// Example: you fix a bug in custom minimizer/custom function, but unfortunately webpack doesn't know about it, so you will get the same fullhash/chunkhash\n// to avoid this you can provide version of your custom minimizer\n// You don't need if you use only `contenthash`\nminify.getMinimizerVersion = () =\u003e {\n  let packageJson;\n\n  try {\n    // eslint-disable-next-line global-require, import/no-extraneous-dependencies\n    packageJson = require(\"uglify-module/package.json\");\n  } catch (error) {\n    // Ignore\n  }\n\n  return packageJson \u0026\u0026 packageJson.version;\n};\n\nmodule.exports = {\n  optimization: {\n    minimize: true,\n    minimizer: [\n      new TerserPlugin({\n        terserOptions: {\n          myCustomOption: true,\n        },\n        minify,\n      }),\n    ],\n  },\n};\n```\n\n### `terserOptions`\n\nType:\n\n```ts\ntype terserOptions = {\n  compress?: boolean | CompressOptions;\n  ecma?: ECMA;\n  enclose?: boolean | string;\n  ie8?: boolean;\n  keep_classnames?: boolean | RegExp;\n  keep_fnames?: boolean | RegExp;\n  mangle?: boolean | MangleOptions;\n  module?: boolean;\n  nameCache?: object;\n  format?: FormatOptions;\n  /** @deprecated */\n  output?: FormatOptions;\n  parse?: ParseOptions;\n  safari10?: boolean;\n  sourceMap?: boolean | SourceMapOptions;\n  toplevel?: boolean;\n};\n```\n\nDefault: [default](https://github.com/terser/terser#minify-options)\n\nTerser [options](https://github.com/terser/terser#minify-options).\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n  optimization: {\n    minimize: true,\n    minimizer: [\n      new TerserPlugin({\n        terserOptions: {\n          ecma: undefined,\n          parse: {},\n          compress: {},\n          mangle: true, // Note `mangle.properties` is `false` by default.\n          module: false,\n          // Deprecated\n          output: null,\n          format: null,\n          toplevel: false,\n          nameCache: null,\n          ie8: false,\n          keep_classnames: undefined,\n          keep_fnames: false,\n          safari10: false,\n        },\n      }),\n    ],\n  },\n};\n```\n\n### `extractComments`\n\nType:\n\n```ts\ntype extractComments =\n  | boolean\n  | string\n  | RegExp\n  | ((\n      astNode: any,\n      comment: {\n        value: string;\n        type: \"comment1\" | \"comment2\" | \"comment3\" | \"comment4\";\n        pos: number;\n        line: number;\n        col: number;\n      }\n    ) =\u003e boolean)\n  | {\n      condition?:\n        | boolean\n        | \"all\"\n        | \"some\"\n        | RegExp\n        | ((\n            astNode: any,\n            comment: {\n              value: string;\n              type: \"comment1\" | \"comment2\" | \"comment3\" | \"comment4\";\n              pos: number;\n              line: number;\n              col: number;\n            }\n          ) =\u003e boolean)\n        | undefined;\n      filename?: string | ((fileData: any) =\u003e string) | undefined;\n      banner?:\n        | string\n        | boolean\n        | ((commentsFile: string) =\u003e string)\n        | undefined;\n    };\n```\n\nDefault: `true`\n\nWhether comments shall be extracted to a separate file, (see [details](https://github.com/webpack/webpack/commit/71933e979e51c533b432658d5e37917f9e71595a)).\nBy default extract only comments using `/^\\**!|@preserve|@license|@cc_on/i` regexp condition and remove remaining comments.\nIf the original file is named `foo.js`, then the comments will be stored to `foo.js.LICENSE.txt`.\nThe `terserOptions.format.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.\n\n#### `boolean`\n\nEnable/disable extracting comments.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n  optimization: {\n    minimize: true,\n    minimizer: [\n      new TerserPlugin({\n        extractComments: true,\n      }),\n    ],\n  },\n};\n```\n\n#### `string`\n\nExtract `all` or `some` (use `/^\\**!|@preserve|@license|@cc_on/i` RegExp) comments.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n  optimization: {\n    minimize: true,\n    minimizer: [\n      new TerserPlugin({\n        extractComments: \"all\",\n      }),\n    ],\n  },\n};\n```\n\n#### `RegExp`\n\nAll comments that match the given expression will be extracted to the separate file.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n  optimization: {\n    minimize: true,\n    minimizer: [\n      new TerserPlugin({\n        extractComments: /@extract/i,\n      }),\n    ],\n  },\n};\n```\n\n#### `function`\n\nAll comments that match the given expression will be extracted to the separate file.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n  optimization: {\n    minimize: true,\n    minimizer: [\n      new TerserPlugin({\n        extractComments: (astNode, comment) =\u003e {\n          if (/@extract/i.test(comment.value)) {\n            return true;\n          }\n\n          return false;\n        },\n      }),\n    ],\n  },\n};\n```\n\n#### `object`\n\nAllow to customize condition for extract comments, specify extracted file name and banner.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n  optimization: {\n    minimize: true,\n    minimizer: [\n      new TerserPlugin({\n        extractComments: {\n          condition: /^\\**!|@preserve|@license|@cc_on/i,\n          filename: (fileData) =\u003e {\n            // The \"fileData\" argument contains object with \"filename\", \"basename\", \"query\" and \"hash\"\n            return `${fileData.filename}.LICENSE.txt${fileData.query}`;\n          },\n          banner: (licenseFile) =\u003e {\n            return `License information can be found in ${licenseFile}`;\n          },\n        },\n      }),\n    ],\n  },\n};\n```\n\n##### `condition`\n\nType:\n\n```ts\ntype condition =\n  | boolean\n  | \"all\"\n  | \"some\"\n  | RegExp\n  | ((\n      astNode: any,\n      comment: {\n        value: string;\n        type: \"comment1\" | \"comment2\" | \"comment3\" | \"comment4\";\n        pos: number;\n        line: number;\n        col: number;\n      }\n    ) =\u003e boolean)\n  | undefined;\n```\n\nCondition what comments you need extract.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n  optimization: {\n    minimize: true,\n    minimizer: [\n      new TerserPlugin({\n        extractComments: {\n          condition: \"some\",\n          filename: (fileData) =\u003e {\n            // The \"fileData\" argument contains object with \"filename\", \"basename\", \"query\" and \"hash\"\n            return `${fileData.filename}.LICENSE.txt${fileData.query}`;\n          },\n          banner: (licenseFile) =\u003e {\n            return `License information can be found in ${licenseFile}`;\n          },\n        },\n      }),\n    ],\n  },\n};\n```\n\n##### `filename`\n\nType:\n\n```ts\ntype filename = string | ((fileData: any) =\u003e string) | undefined;\n```\n\nDefault: `[file].LICENSE.txt[query]`\n\nAvailable placeholders: `[file]`, `[query]` and `[filebase]` (`[base]` for webpack 5).\n\nThe file where the extracted comments will be stored.\nDefault is to append the suffix `.LICENSE.txt` to the original filename.\n\n\u003e **Warning**\n\u003e\n\u003e We highly recommend using the `txt` extension. Using `js`/`cjs`/`mjs` extensions may conflict with existing assets which leads to broken code.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n  optimization: {\n    minimize: true,\n    minimizer: [\n      new TerserPlugin({\n        extractComments: {\n          condition: /^\\**!|@preserve|@license|@cc_on/i,\n          filename: \"extracted-comments.js\",\n          banner: (licenseFile) =\u003e {\n            return `License information can be found in ${licenseFile}`;\n          },\n        },\n      }),\n    ],\n  },\n};\n```\n\n##### `banner`\n\nType:\n\n```ts\ntype banner = string | boolean | ((commentsFile: string) =\u003e string) | undefined;\n```\n\nDefault: `/*! For license information please see ${commentsFile} */`\n\nThe banner text that points to the extracted file and will be added on top of the original file.\nCan be `false` (no banner), a `String`, or a `Function\u003c(string) -\u003e String\u003e` that will be called with the filename where extracted comments have been stored.\nWill be wrapped into comment.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n  optimization: {\n    minimize: true,\n    minimizer: [\n      new TerserPlugin({\n        extractComments: {\n          condition: true,\n          filename: (fileData) =\u003e {\n            // The \"fileData\" argument contains object with \"filename\", \"basename\", \"query\" and \"hash\"\n            return `${fileData.filename}.LICENSE.txt${fileData.query}`;\n          },\n          banner: (commentsFile) =\u003e {\n            return `My custom banner about license information ${commentsFile}`;\n          },\n        },\n      }),\n    ],\n  },\n};\n```\n\n## Examples\n\n### Preserve Comments\n\nExtract all legal comments (i.e. `/^\\**!|@preserve|@license|@cc_on/i`) and preserve `/@license/i` comments.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n  optimization: {\n    minimize: true,\n    minimizer: [\n      new TerserPlugin({\n        terserOptions: {\n          format: {\n            comments: /@license/i,\n          },\n        },\n        extractComments: true,\n      }),\n    ],\n  },\n};\n```\n\n### Remove Comments\n\nIf you avoid building with comments, use this config:\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n  optimization: {\n    minimize: true,\n    minimizer: [\n      new TerserPlugin({\n        terserOptions: {\n          format: {\n            comments: false,\n          },\n        },\n        extractComments: false,\n      }),\n    ],\n  },\n};\n```\n\n### [`uglify-js`](https://github.com/mishoo/UglifyJS)\n\n[`UglifyJS`](https://github.com/mishoo/UglifyJS) is a JavaScript parser, minifier, compressor and beautifier toolkit.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n  optimization: {\n    minimize: true,\n    minimizer: [\n      new TerserPlugin({\n        minify: TerserPlugin.uglifyJsMinify,\n        // `terserOptions` options will be passed to `uglify-js`\n        // Link to options - https://github.com/mishoo/UglifyJS#minify-options\n        terserOptions: {},\n      }),\n    ],\n  },\n};\n```\n\n### [`swc`](https://github.com/swc-project/swc)\n\n[`swc`](https://github.com/swc-project/swc) is a super-fast compiler written in rust; producing widely-supported javascript from modern standards and typescript.\n\n\u003e **Warning**\n\u003e\n\u003e the `extractComments` option is not supported and all comments will be removed by default, it will be fixed in future\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n  optimization: {\n    minimize: true,\n    minimizer: [\n      new TerserPlugin({\n        minify: TerserPlugin.swcMinify,\n        // `terserOptions` options will be passed to `swc` (`@swc/core`)\n        // Link to options - https://swc.rs/docs/config-js-minify\n        terserOptions: {},\n      }),\n    ],\n  },\n};\n```\n\n### [`esbuild`](https://github.com/evanw/esbuild)\n\n[`esbuild`](https://github.com/evanw/esbuild) is an extremely fast JavaScript bundler and minifier.\n\n\u003e **Warning**\n\u003e\n\u003e the `extractComments` option is not supported and all legal comments (i.e. copyright, licenses and etc) will be preserved\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n  optimization: {\n    minimize: true,\n    minimizer: [\n      new TerserPlugin({\n        minify: TerserPlugin.esbuildMinify,\n        // `terserOptions` options will be passed to `esbuild`\n        // Link to options - https://esbuild.github.io/api/#minify\n        // Note: the `minify` options is true by default (and override other `minify*` options), so if you want to disable the `minifyIdentifiers` option (or other `minify*` options) please use:\n        // terserOptions: {\n        //   minify: false,\n        //   minifyWhitespace: true,\n        //   minifyIdentifiers: false,\n        //   minifySyntax: true,\n        // },\n        terserOptions: {},\n      }),\n    ],\n  },\n};\n```\n\n### Custom Minify Function\n\nOverride default minify function - use `uglify-js` for minification.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n  optimization: {\n    minimize: true,\n    minimizer: [\n      new TerserPlugin({\n        minify: (file, sourceMap) =\u003e {\n          // https://github.com/mishoo/UglifyJS2#minify-options\n          const uglifyJsOptions = {\n            /* your `uglify-js` package options */\n          };\n\n          if (sourceMap) {\n            uglifyJsOptions.sourceMap = {\n              content: sourceMap,\n            };\n          }\n\n          return require(\"uglify-js\").minify(file, uglifyJsOptions);\n        },\n      }),\n    ],\n  },\n};\n```\n\n### Typescript\n\nWith default terser minify function:\n\n```ts\nmodule.exports = {\n  optimization: {\n    minimize: true,\n    minimizer: [\n      new TerserPlugin({\n        terserOptions: {\n          compress: true,\n        },\n      }),\n    ],\n  },\n};\n```\n\nWith built-in minify functions:\n\n```ts\nimport type { JsMinifyOptions as SwcOptions } from \"@swc/core\";\nimport type { MinifyOptions as UglifyJSOptions } from \"uglify-js\";\nimport type { TransformOptions as EsbuildOptions } from \"esbuild\";\nimport type { MinifyOptions as TerserOptions } from \"terser\";\n\nmodule.exports = {\n  optimization: {\n    minimize: true,\n    minimizer: [\n      new TerserPlugin\u003cSwcOptions\u003e({\n        minify: TerserPlugin.swcMinify,\n        terserOptions: {\n          // `swc` options\n        },\n      }),\n      new TerserPlugin\u003cUglifyJSOptions\u003e({\n        minify: TerserPlugin.uglifyJsMinify,\n        terserOptions: {\n          // `uglif-js` options\n        },\n      }),\n      new TerserPlugin\u003cEsbuildOptions\u003e({\n        minify: TerserPlugin.esbuildMinify,\n        terserOptions: {\n          // `esbuild` options\n        },\n      }),\n\n      // Alternative usage:\n      new TerserPlugin\u003cTerserOptions\u003e({\n        minify: TerserPlugin.terserMinify,\n        terserOptions: {\n          // `terser` options\n        },\n      }),\n    ],\n  },\n};\n```\n\n## Contributing\n\nPlease take a moment to read our contributing guidelines if you haven't yet done so.\n\n[CONTRIBUTING](./.github/CONTRIBUTING.md)\n\n## License\n\n[MIT](./LICENSE)\n\n[npm]: https://img.shields.io/npm/v/terser-webpack-plugin.svg\n[npm-url]: https://npmjs.com/package/terser-webpack-plugin\n[node]: https://img.shields.io/node/v/terser-webpack-plugin.svg\n[node-url]: https://nodejs.org\n[tests]: https://github.com/webpack-contrib/terser-webpack-plugin/workflows/terser-webpack-plugin/badge.svg\n[tests-url]: https://github.com/webpack-contrib/terser-webpack-plugin/actions\n[cover]: https://codecov.io/gh/webpack-contrib/terser-webpack-plugin/branch/master/graph/badge.svg\n[cover-url]: https://codecov.io/gh/webpack-contrib/terser-webpack-plugin\n[discussion]: https://img.shields.io/github/discussions/webpack/webpack\n[discussion-url]: https://github.com/webpack/webpack/discussions\n[size]: https://packagephobia.now.sh/badge?p=terser-webpack-plugin\n[size-url]: https://packagephobia.now.sh/result?p=terser-webpack-plugin\n","funding_links":["https://opencollective.com/webpack"],"categories":["JavaScript","打包工具","webpack loader plugin"],"sub_categories":["webpack 辅助工具、Loader 和插件"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwebpack-contrib%2Fterser-webpack-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwebpack-contrib%2Fterser-webpack-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwebpack-contrib%2Fterser-webpack-plugin/lists"}