# @amoo-miki/terser-webpack-plugin 中文文档

规范地址：https://npmcn.com/package/%40amoo-miki/terser-webpack-plugin/

版本：1\.4\.5-rc\.2
npm 元数据更新时间：2023-03-16T15:38:09.666Z
中文译文更新时间：2026-11-06T01:03:31.474Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40amoo-miki/terser-webpack-plugin
原文对照：https://npmcn.com/package/%40amoo-miki/terser-webpack-plugin/?lang=original
项目主页：https://github.com/AMoo-Miki/terser-webpack-plugin
源码仓库：https://github.com/webpack-contrib/terser-webpack-plugin

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：44.8 kB，9 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- Node.js 要求：\>= 6\.9\.0
- 运行依赖：10 个
- peer 依赖：webpack ^4\.0\.0
- 首次发布：2023-03-16T15:38:09.208Z
- 最新版本发布：2023-03-16T15:38:09.466Z
- 近 30 天下载量：29537（2026-10-06 至 2026-11-04，npm 官方下载统计）
- 已发布版本数：1（近 12 个月 0 个）

## 中文简介

网络包装的特尔瑟插件

## 安装

```sh
npm install @amoo-miki/terser-webpack-plugin
```

也可以使用：`pnpm add @amoo-miki/terser-webpack-plugin`、`yarn add @amoo-miki/terser-webpack-plugin`、`bun add @amoo-miki/terser-webpack-plugin`

## README

[![](https://webpack.js.org/assets/icon-square-big.svg)](https://github.com/webpack/webpack)

[![npm](https://img.shields.io/npm/v/terser-webpack-plugin.svg)](https://npmjs.com/package/terser-webpack-plugin) [![node](https://img.shields.io/node/v/terser-webpack-plugin.svg)](https://nodejs.org/) [![deps](https://david-dm.org/webpack-contrib/terser-webpack-plugin.svg)](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)](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)](https://codecov.io/gh/webpack-contrib/terser-webpack-plugin) [![chat](https://img.shields.io/badge/gitter-webpack%2Fwebpack-brightgreen.svg)](https://gitter.im/webpack/webpack) [![size](https://packagephobia.now.sh/badge?p=terser-webpack-plugin)](https://packagephobia.now.sh/result?p=terser-webpack-plugin)

# 特瑟-网包-插件

此插件使用 [坐标](https://github.com/terser-js/terser) 来修改您的 JavaScript .

> (单位:千美元) `webpack@3` 使用情况 [三角-网包-插件-遗留物](https://www.npmjs.com/package/terser-webpack-plugin-legacy) 软件包

## 开始

开始,你需要安装 `terser-webpack-plugin`数字 :

```console
$ npm install terser-webpack-plugin --save-dev
```

然后将插件添加到您的 `webpack` 相会. 例如:

**网络包装. config.js**

```js
const TerserPlugin = require('terser-webpack-plugin');

module.exports = {
  optimization: {
    minimizer: [new TerserPlugin()],
  },
};
```

跑开 `webpack` 通过你喜欢的方法.

## 选项

### `test`

类型 : `String|RegExp|Array<String|RegExp>` 默认 : `/\.m?js(\?.*)?$/i`

测试是否匹配文件 .

**网络包装. config.js**

```js
module.exports = {
  optimization: {
    minimizer: [
      new TerserPlugin({
        test: /\.js(\?.*)?$/i,
      }),
    ],
  },
};
```

### `include`

类型 : `String|RegExp|Array<String|RegExp>` 默认 : `undefined`

包含的文件 .

**网络包装. config.js**

```js
module.exports = {
  optimization: {
    minimizer: [
      new TerserPlugin({
        include: /\/includes/,
      }),
    ],
  },
};
```

### `exclude`

类型 : `String|RegExp|Array<String|RegExp>` 默认 : `undefined`

要排除的文件.

**网络包装. config.js**

```js
module.exports = {
  optimization: {
    minimizer: [
      new TerserPlugin({
        exclude: /\/excludes/,
      }),
    ],
  },
};
```

### `chunkFilter`

类型 : `Function<(chunk) -> boolean>` 默认 : `() => true`

允许过滤哪些块应该被丑化(默认所有块都是被丑化的). 返回时 `true` 以丑化块, `false` 否则.

**网络包装. 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`

类型 : `Boolean|String` 默认 : `false`

启用文件缓存 . 缓存目录的默认路径 : `node_modules/.cache/terser-webpack-plugin`。 。 。 .

> 如果你用你自己的 `minify` 请读取 `minify` 区域中缓存无效.

#### `Boolean`

启用/ 禁用文件缓存 .

**网络包装. config.js**

```js
module.exports = {
  optimization: {
    minimizer: [
      new TerserPlugin({
        cache: true,
      }),
    ],
  },
};
```

#### `String`

启用文件缓存并设置缓存目录的路径 .

**网络包装. config.js**

```js
module.exports = {
  optimization: {
    minimizer: [
      new TerserPlugin({
        cache: 'path/to/cache',
      }),
    ],
  },
};
```

### `cacheKeys`

类型 : `Function<(defaultCacheKeys, file) -> Object>` 默认 : `defaultCacheKeys => defaultCacheKeys`

允许您覆盖默认缓存密钥 .

默认缓存密钥 :

```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
});
```

**网络包装. config.js**

```js
module.exports = {
  optimization: {
    minimizer: [
      new TerserPlugin({
        cache: true,
        cacheKeys: (defaultCacheKeys, file) => {
          defaultCacheKeys.myCacheKey = 'myCacheKeyValue';

          return defaultCacheKeys;
        },
      }),
    ],
  },
};
```

### `parallel`

类型 : `Boolean|Number` 默认 : `false`

使用多进程并行运行来提高构建速度. 同时运行的默认次数 : `os.cpus().length - 1`。 。 。 .

> iQQ并行化可以显著地加速你的建设,因此也是 **高度建议**。 。 。 .

#### `Boolean`

启用/ 禁用多进程并行运行 .

**网络包装. config.js**

```js
module.exports = {
  optimization: {
    minimizer: [
      new TerserPlugin({
        parallel: true,
      }),
    ],
  },
};
```

#### `Number`

启用多进程并行运行并设定并行运行的数量 .

**网络包装. config.js**

```js
module.exports = {
  optimization: {
    minimizer: [
      new TerserPlugin({
        parallel: 4,
      }),
    ],
  },
};
```

### `sourceMap`

类型 : `Boolean` 默认 : `false`

使用源地图将错误消息位置映射到模块中(这降低了编译速度). 如果你用自己的东西 `minify` 请读取 `minify` 用于正确处理源地图的部分.

> ⚠️ **`cheap-source-map` 选项不使用此插件**。 。 。 .

**网络包装. config.js**

```js
module.exports = {
  optimization: {
    minimizer: [
      new TerserPlugin({
        sourceMap: true,
      }),
    ],
  },
};
```

### `minify`

类型 : `Function` 默认 : `undefined`

允许您推翻默认的最小化函数 . 默认插件使用 [坐标](https://github.com/terser-js/terser) 软件包. 可用于使用和测试未发表的版本或叉子.

> ⚠️ **总是使用 `require` 内部 `minify` 函数 `parallel` 启用选项**。 。 。 .

**网络包装. 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`

类型 : `Object` 默认 : [默认](https://github.com/terser-js/terser#minify-options)

Terser 微调 [选项](https://github.com/terser-js/terser#minify-options)。 。 。 .

**网络包装. 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`

类型 : `Boolean|String|RegExp|Function<(node, comment) -> Boolean|Object>|Object` 默认 : `false`

是否将注释提取到单独的文件中,(见 [细节](https://github.com/webpack/webpack/commit/71933e979e51c533b432658d5e37917f9e71595a)) (中文(简体) ). 默认情况下只取出使用 `/^\**!|@preserve|@license|@cc_on/i` 正则解释条件并删除所剩的注释. 如果原始文件被命名 `foo.js`,然后将注释存储到 `foo.js.LICENSE`。 。 。 . 这个 `terserOptions.output.comments` 选项指定是否保留注释,即有可能保留一些注释(如说明),同时取出其他注释,甚至保留已取出的评论.

#### `Boolean`

启用/ 无法提取注释 .

**网络包装. config.js**

```js
module.exports = {
  optimization: {
    minimizer: [
      new TerserPlugin({
        extractComments: true,
      }),
    ],
  },
};
```

#### `String`

摘录 `all` 或者说 `some` (使用时 `/^\**!|@preserve|@license|@cc_on/i` RegExp)的评论.

**网络包装. config.js**

```js
module.exports = {
  optimization: {
    minimizer: [
      new TerserPlugin({
        extractComments: 'all',
      }),
    ],
  },
};
```

#### `RegExp`

所有符合给定表达式的注释都会被提取到单独的文件中.

**网络包装. config.js**

```js
module.exports = {
  optimization: {
    minimizer: [
      new TerserPlugin({
        extractComments: /@extract/i,
      }),
    ],
  },
};
```

#### `Function<(node, comment) -> Boolean>`

所有符合给定表达式的注释都会被提取到单独的文件中.

**网络包装. config.js**

```js
module.exports = {
  optimization: {
    minimizer: [
      new TerserPlugin({
        extractComments: (astNode, comment) => {
          if (/@extract/i.test(comment.value)) {
            return true;
          }

          return false;
        },
      }),
    ],
  },
};
```

#### `Object`

允许自定义提取注释的条件,指定提取的文件名和横幅.

**网络包装. 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`

类型 : `Boolean|String|RegExp|Function<(node, comment) -> Boolean|Object>`

条件 需要什么评论 提取.

**网络包装. 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`

类型 : `String|Function<(string) -> String>` 默认 : `${file}.LICENSE`

所取注释将存储的文件 . 默认是附加后缀 `.LICENSE` 转到原文件名.

**网络包装. 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`

类型 : `Boolean|String|Function<(string) -> String>` 默认 : `/*! For license information please see ${commentsFile} */`

指向取出的文件并会被添加到原始文件上方的横幅文字. 可能会 `false` (无旗帜),a `String`,或一个 `Function<(string) -> String>` 将使用文件名调用已存储已提取的注释. 将发表评论.

**网络包装. 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`

类型 : `Function<(warning, source) -> Boolean>` 默认 : `() => true`

允许过滤 [坐标](https://github.com/terser-js/terser) 警告! 警告你们. 返回时 `true` 为了保持警告, `false` 否则.

**网络包装. 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;
        },
      }),
    ],
  },
};
```

## 实例

### 缓存和平行

启用缓存和多进程并行运行 .

**网络包装. config.js**

```js
module.exports = {
  optimization: {
    minimizer: [
      new TerserPlugin({
        cache: true,
        parallel: true,
      }),
    ],
  },
};
```

### 保留注释

摘录所有法律评论(即:. `/^\**!|@preserve|@license|@cc_on/i`)和保留 `/@license/i` 评论.

**网络包装. config.js**

```js
module.exports = {
  optimization: {
    minimizer: [
      new TerserPlugin({
        terserOptions: {
          output: {
            comments: /@license/i,
          },
        },
        extractComments: true,
      }),
    ],
  },
};
```

### 删除注释

如果您避免使用注释构建, 请设定 **terser 选项.output.comments (中文(简体) )** 改为 **虚假** 如此配置 :

**网络包装. config.js**

```js
module.exports = {
  optimization: {
    minimizer: [
      new TerserPlugin({
        terserOptions: {
          output: {
            comments: false,
          },
        },
      }),
    ],
  },
};
```

### 自定义最小化函数

覆盖默认的微缩函数 - 使用 `uglify-js` 用于微分化.

**网络包装. 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);
        },
      }),
    ],
  },
};
```

## 捐款

请花点时间来读一下我们的贡献准则 如果你还没有这样做.

[捐款](https://npmcn.com/package/%40amoo-miki/terser-webpack-plugin/.github/CONTRIBUTING.md)

## 许可证

[麻省理工学院](https://npmcn.com/package/%40amoo-miki/terser-webpack-plugin/LICENSE)

## 常见问题

### @amoo-miki/terser-webpack-plugin 是什么？

网络包装的特尔瑟插件

### 如何安装 @amoo-miki/terser-webpack-plugin？

在项目目录运行 npm install @amoo-miki/terser-webpack-plugin，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：webpack（^4\.0\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @amoo-miki/terser-webpack-plugin 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/amoo-miki\_\_terser-webpack-plugin 是否存在。

### @amoo-miki/terser-webpack-plugin 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @amoo-miki/terser-webpack-plugin 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>= 6\.9\.0。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @amoo-miki/terser-webpack-plugin 可以商用吗？

@amoo-miki/terser-webpack-plugin 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @amoo-miki/terser-webpack-plugin 的下载量有多少？

根据 npm 官方下载统计，@amoo-miki/terser-webpack-plugin 在 2026/10/06 – 2026/11/04 这 30 天内被下载 29,537 次，日均约 985 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @amoo-miki/terser-webpack-plugin 还在维护吗？

最新版本 1\.4\.5-rc\.2 发布于 2023/03/16（3 年前）；至今共发布 1 个版本，其中过去 12 个月发布了 0 个；首次发布于 2023/03/16。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

