# @rolldown/pluginutils 中文文档

规范地址：https://npmcn.com/package/%40rolldown/pluginutils/

版本：1\.0\.1
npm 元数据更新时间：2026-05-13T03:52:30.235Z
中文译文更新时间：2026-11-04T19:34:08.440Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40rolldown/pluginutils
原文对照：https://npmcn.com/package/%40rolldown/pluginutils/?lang=original
项目主页：https://github.com/rolldown/plugins/tree/main/packages/pluginutils#readme
源码仓库：https://github.com/rolldown/plugins

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

- 包体积（解压后）：25.7 kB，8 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- 运行依赖：0 个
- 首次发布：2025-05-09T14:34:07.682Z
- 最新版本发布：2026-05-13T03:52:29.927Z
- 近 30 天下载量：729816617（2026-10-07 至 2026-11-05，npm 官方下载统计）
- 已发布版本数：124（近 12 个月 33 个）

## 中文简介

用于Rolldown的插件实用程序

## 安装

```sh
npm install @rolldown/pluginutils
```

也可以使用：`pnpm add @rolldown/pluginutils`、`yarn add @rolldown/pluginutils`、`bun add @rolldown/pluginutils`

## README

# @rolldown / pluginutils [![npm](https://img.shields.io/npm/v/@rolldown/pluginutils.svg)](https://npmx.dev/package/@rolldown/pluginutils)

插件实用程序 [利差](https://rolldown.rs/)。

包括用于插件挂钩过滤器的regex帮助器、可组合过滤器表达式，以及用于过滤仅支持vite - service的插件的帮助器。

## 安装

```bash
pnpm add -D @rolldown/pluginutils
```

## 用法

```ts
import { exactRegex, prefixRegex, makeIdFiltersToMatchWithQuery } from '@rolldown/pluginutils'
```

所有筛选器帮助器也通过 `/filter` 子路径:

```ts
import { and, or, id, include } from '@rolldown/pluginutils/filter'
```

## Regex助手

### `exactRegex`

-   **类型:** `(str: string, flags?: string) => RegExp`

构造一个 `RegExp` 匹配指定的字符串。可用作插件钩子过滤器。

```ts
import { exactRegex } from '@rolldown/pluginutils'

const plugin = {
  name: 'plugin',
  resolveId: {
    filter: { id: exactRegex('foo') },
    handler(id) {}, // only called for `foo`
  },
}
```

### `prefixRegex`

-   **类型:** `(str: string, flags?: string) => RegExp`

构造一个 `RegExp` 匹配以指定前缀开头的值。

```ts
import { prefixRegex } from '@rolldown/pluginutils'

const plugin = {
  name: 'plugin',
  resolveId: {
    filter: { id: prefixRegex('foo') },
    handler(id) {}, // called for IDs starting with `foo`
  },
}
```

### `makeIdFiltersToMatchWithQuery`

-   **类型:** `(input: string | RegExp | (string | RegExp)[]) => string | RegExp | (string | RegExp)[]`

转换id筛选器，使其也匹配包含查询字符串的id。

```ts
import { makeIdFiltersToMatchWithQuery } from '@rolldown/pluginutils'

const plugin = {
  name: 'plugin',
  transform: {
    filter: { id: makeIdFiltersToMatchWithQuery(['**/*.js', /\.ts$/]) },
    // Matches:
    //   foo.js, foo.js?foo, foo.txt?foo.js,
    //   foo.ts, foo.ts?foo, foo.txt?foo.ts
    handler(code, id) {},
  },
}
```

## 可组合过滤器

[可组合过滤器表达式](https://rolldown.rs/apis/plugin-api/hook-filters#composable-filters) 对于一个简单的用例 `id`/`include`/`exclude` 是不够的。例如，当一个插件需要合并时 `id`， `moduleType`， `code`, `query` 条件。

```ts
import { and, code, id, include, interpreter, moduleType, or } from '@rolldown/pluginutils'

const expr = include(and(or(id(/\.tsx?$/), id(/\.jsx?$/)), moduleType('tsx'), code(/import React/)))

interpreter(expr, sourceCode, sourceId, 'tsx') // boolean
```

### 建筑商

| 建设者 | 描述 |
| --- | --- |
| `and(...exprs)` | 所有操作数必须匹配。 |
| `or(...exprs)` | 至少有一个操作数必须匹配。 |
| `not(expr)` | 对操作数求反。 |
| `id(pattern, params?)` | 匹配模块id。 `pattern` 是 `string` 或 `RegExp`。 `params.cleanUrl` 在匹配之前剥离查询/哈希。 |
| `importerId(pattern, params?)` | 匹配进口商的身份证。形状相同 `id`。 |
| `moduleType(type)` | 匹配Rolldown的模块类型(`'js'`， `'jsx'`， `'ts'`， `'tsx'`， `'json'`， `'text'`， `'base64'`， `'dataurl'`， `'binary'`， `'empty'`，或自定义字符串)。 |
| `code(pattern)` | 匹配模块源。 `string` 匹配与 `includes`； `RegExp` 与 `test`。 |
| `query(key, pattern)` | 匹配单个查询参数。 `pattern` 是 `boolean` (关键业务/真实), `string` （精确值），或 `RegExp` (价值模式)。 |
| `queries(obj)` | 缩写 `and(...)` 在多个 `query` 条目。 |
| `include(expr)` | 顶层包装标记 `expr` 作为一个包含规则。 |
| `exclude(expr)` | 顶层包装标记 `expr` 作为排除规则。 |

### `interpreter`

-   **类型:** `(exprs, code?, id?, moduleType?, importerId?) => boolean`

根据给定的输入计算一个或多个顶级表达式。返回 `true` 当至少一个 `include` 是否匹配 `exclude` 匹配;当没有 `include` 存在，默认为 `true` 除非一个 `exclude` 匹配。

必须提供每个表达式所需的参数。例如，计算an `id(...)` 不传递的表达式 `id` 将抛出。

## `filterVitePlugins`

-   **类型:** `<T>(plugins: T | T[] | null | undefined | false) => T[]`

删除针对开发服务器的Vite插件(`apply: 'serve'`)从一个（可能嵌套的）插件数组。插件的 `apply` 函数是否被调用 `command: 'build'` 语境决定。在Rolldown配置中重用Vite插件数组时非常有用。

```ts
import { defineConfig } from 'rolldown'
import { filterVitePlugins } from '@rolldown/pluginutils'
import viteReact from '@vitejs/plugin-react'

export default defineConfig({
  plugins: filterVitePlugins([
    viteReact(),
    {
      name: 'dev-only',
      apply: 'serve', // filtered out
      // ...
    },
  ]),
})
```

## 许可证

麻省理工学院

## 常见问题

### @rolldown/pluginutils 是什么？

用于Rolldown的插件实用程序

### 如何安装 @rolldown/pluginutils？

在项目目录运行 npm install @rolldown/pluginutils，或使用 pnpm add / yarn add / bun add。

### @rolldown/pluginutils 支持 TypeScript 吗？

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

### @rolldown/pluginutils 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @rolldown/pluginutils 可以商用吗？

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

### @rolldown/pluginutils 的下载量有多少？

根据 npm 官方下载统计，@rolldown/pluginutils 在 2026/10/07 – 2026/11/05 这 30 天内被下载 729,816,617 次，日均约 24,327,221 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @rolldown/pluginutils 还在维护吗？

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

