# @brodybits/remark-parse 中文文档

规范地址：https://npmcn.com/package/%40brodybits/remark-parse/

版本：8\.0\.6
npm 元数据更新时间：2022-04-04T20:44:37.533Z
中文译文更新时间：2026-11-08T15:54:50.233Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40brodybits/remark-parse
原文对照：https://npmcn.com/package/%40brodybits/remark-parse/?lang=original
项目主页：https://remark.js.org/
源码仓库：https://github.com/brodybits/remark#main

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

- 包体积（解压后）：115 kB，53 个文件
- TypeScript 类型：包内自带
- 运行依赖：16 个
- 首次发布：2021-06-14T17:05:47.848Z
- 最新版本发布：2021-07-06T16:54:28.577Z
- 近 30 天下载量：35880（2026-10-09 至 2026-11-07，npm 官方下载统计）
- 已发布版本数：4（近 12 个月 0 个）

## 中文简介

解析 Markdown 的注释插件

## 安装

```sh
npm install @brodybits/remark-parse
```

也可以使用：`pnpm add @brodybits/remark-parse`、`yarn add @brodybits/remark-parse`、`bun add @brodybits/remark-parse`

## README

# @brodybits/remark-parse 第8版 页面存档备份,存于互联网档案馆

与 `trim`@ 1.x 在依赖中更新

[解析器](https://github.com/unifiedjs/unified#processorparser) 页:1 [**统一**](https://github.com/unifiedjs/unified)。 。 。 . 将标记降为 [**目标数**](https://github.com/syntax-tree/mdast) 语法树. 用于 [**评论** 处理器](https://github.com/remarkjs/remark/tree/main/packages/remark) 但也可以单独使用. 可能会 [延长](https://npmcn.com/package/%40brodybits/remark-parse/#readme-extending-the-parser) 以改变Markdown的解析方式.

这个版本是 _测试_ 带节点.js返回版本 `6.0.0` npm 版本返回到( n) `3.10.7`。 。 。 .

## 发起人

<table><tbody><tr><td align="center" colspan="2"><a href="https://www.gatsbyjs.org/" rel="nofollow noopener noreferrer">盖茨比</a><br>🥇<br><br><a href="https://www.gatsbyjs.org/" rel="nofollow noopener noreferrer"><img src="https://avatars1.githubusercontent.com/u/12551863?s=900&amp;v=4" loading="lazy" decoding="async" referrerpolicy="no-referrer"></a></td><td align="center" colspan="2"><a href="https://vercel.com/" rel="nofollow noopener noreferrer">维塞尔</a><br>🥇<br><br><a href="https://vercel.com/" rel="nofollow noopener noreferrer"><img src="https://images.opencollective.com/vercel/d8a5bee/logo/512.png" loading="lazy" decoding="async" referrerpolicy="no-referrer"></a></td><td align="center" colspan="2"><a href="https://www.netlify.com/" rel="nofollow noopener noreferrer">净化</a><br><br><br><a href="https://www.netlify.com/" rel="nofollow noopener noreferrer"><img src="https://images.opencollective.com/netlify/4087de2/logo/512.png" loading="lazy" decoding="async" referrerpolicy="no-referrer"></a></td></tr><tr><td align="center"><a href="https://www.holloway.com/" rel="nofollow noopener noreferrer">霍洛韦</a><br><br><br><a href="https://www.holloway.com/" rel="nofollow noopener noreferrer"><img src="https://avatars1.githubusercontent.com/u/35904294?s=300&amp;v=4" loading="lazy" decoding="async" referrerpolicy="no-referrer"></a></td><td align="center"><a href="https://themeisle.com/" rel="nofollow noopener noreferrer">主题</a><br>🥉<br><br><a href="https://themeisle.com/" rel="nofollow noopener noreferrer"><img src="https://twitter-avatar.now.sh/themeisle" loading="lazy" decoding="async" referrerpolicy="no-referrer"></a></td><td align="center"><a href="https://boostio.co/" rel="nofollow noopener noreferrer">脚印</a><br>🥉<br><br><a href="https://boostio.co/" rel="nofollow noopener noreferrer"><img src="https://avatars1.githubusercontent.com/u/13612118?s=300&amp;v=4" loading="lazy" decoding="async" referrerpolicy="no-referrer"></a></td><td align="center"><a href="https://expo.io/" rel="nofollow noopener noreferrer">博览</a><br>🥉<br><br><a href="https://expo.io/" rel="nofollow noopener noreferrer"><img src="https://avatars1.githubusercontent.com/u/12504344?s=300&amp;v=4" loading="lazy" decoding="async" referrerpolicy="no-referrer"></a></td><td align="center" colspan="2"><br><br><br><br><a href="https://opencollective.com/unified" rel="nofollow noopener noreferrer"><strong>你吗?</strong></a></td></tr></tbody></table>

## 安装

[无](https://docs.npmjs.com/cli/install)数字 :

```sh
npm install @brodybits/remark-parse
```

## 使用

```js
var unified = require('unified')
var createStream = require('unified-stream')
var markdown = require('@brodybits/remark-parse')
var remark2rehype = require('remark-rehype')
var html = require('rehype-stringify')

var processor = unified()
  .use(markdown, {commonmark: true})
  .use(remark2rehype)
  .use(html)

process.stdin.pipe(createStream(processor)).pipe(process.stdout)
```

[见 **统一** 需要更多实例](https://github.com/unifiedjs/unified)

## 目录

-   [API 密码](https://npmcn.com/package/%40brodybits/remark-parse/#readme-api)
    -   [`processor().use(parse[, options])`](https://npmcn.com/package/%40brodybits/remark-parse/#readme-processoruseparse-options)
    -   [`parse.Parser`](https://npmcn.com/package/%40brodybits/remark-parse/#readme-parseparser)
-   [扩展 `Parser`](https://npmcn.com/package/%40brodybits/remark-parse/#readme-extending-the-parser)
    -   [`Parser#blockTokenizers`](https://npmcn.com/package/%40brodybits/remark-parse/#readme-parserblocktokenizers)
    -   [`Parser#blockMethods`](https://npmcn.com/package/%40brodybits/remark-parse/#readme-parserblockmethods)
    -   [`Parser#inlineTokenizers`](https://npmcn.com/package/%40brodybits/remark-parse/#readme-parserinlinetokenizers)
    -   [`Parser#inlineMethods`](https://npmcn.com/package/%40brodybits/remark-parse/#readme-parserinlinemethods)
    -   [`function tokenizer(eat, value, silent)`](https://npmcn.com/package/%40brodybits/remark-parse/#readme-function-tokenizereat-value-silent)
    -   [`tokenizer.locator(value, fromIndex)`](https://npmcn.com/package/%40brodybits/remark-parse/#readme-tokenizerlocatorvalue-fromindex)
    -   [`eat(subvalue)`](https://npmcn.com/package/%40brodybits/remark-parse/#readme-eatsubvalue)
    -   [`add(node[, parent])`](https://npmcn.com/package/%40brodybits/remark-parse/#readme-addnode-parent)
    -   [`add.test()`](https://npmcn.com/package/%40brodybits/remark-parse/#readme-addtest)
    -   [`add.reset(node[, parent])`](https://npmcn.com/package/%40brodybits/remark-parse/#readme-addresetnode-parent)
    -   [关掉一个标识器](https://npmcn.com/package/%40brodybits/remark-parse/#readme-turning-off-a-tokenizer)
-   [警卫](https://npmcn.com/package/%40brodybits/remark-parse/#readme-security)
-   [贡献](https://npmcn.com/package/%40brodybits/remark-parse/#readme-contribute)
-   [许可证](https://npmcn.com/package/%40brodybits/remark-parse/#readme-license)

## API 密码

[见 **统一** aPI 文档](https://github.com/unifiedjs/unified)

### `processor().use(parse[, options])`

配置 `processor` 将 Markdown 读作输入和进程 [**目标数**](https://github.com/syntax-tree/mdast) 语法树.

##### `options`

选项可以直接传递,也可以稍后传递 [`processor.data()`](https://github.com/unifiedjs/unified#processordatakey-value)。 。 。 .

###### `options.gfm`

GFM 模式 (`boolean`,默认值 : `true`) (中文(简体) ).

```markdown
hello ~~hi~~ world
```

打开 :

-   [栅栏码块](https://help.github.com/articles/creating-and-highlighting-code-blocks#fenced-code-blocks)
-   [自动链接 URL](https://help.github.com/articles/autolinked-references-and-urls)
-   [删除( 突破)](https://help.github.com/articles/basic-writing-and-formatting-syntax#styling-text)
-   [任务列表](https://help.github.com/articles/basic-writing-and-formatting-syntax#task-lists)
-   [表格](https://help.github.com/articles/organizing-information-with-tables)

###### `options.commonmark`

普通马克模式( C)`boolean`,默认值 : `false`) (中文(简体) ).

```markdown
This is a paragraph
    and this is also part of the preceding paragraph.
```

允许 :

-   拆分块引用的空行
-   括号( E)`(` 财务报告和审定财务报表 `)`围绕链接和图像标题
-   任何逃脱者 [ASCII 标出](https://spec.commonmark.org/0.29/#backslash-escapes) 字符
-   关闭括号`)`)作为命令列表标记
-   块引用中的 URL 定义

丢弃 :

-   直接跟随段落的缩进代码块
-   ATX标题`# Hash headings`打开散列后无间隔,或 关闭散列前
-   设置下一个标题( E)`Underline headings\n---`) 后一段时
-   链接和图像标题中的新行
-   链接中的白空间和自动链接中的图像 URL(括号中的链接, `<` 财务报告和审定财务报表 `>`(中文(简体) )
-   懒惰块引出续作,行前不超过 字符( c)`>`),用于列表、代码和专题间断

###### `options.pedantic`

Pedantic以前用来模仿旧式的Markdown模式:没有表格,没有 有栅栏的密码 还有很多窃听器. 但请不要使用 未来.

###### `options.blocks`

块数( E)`Array.<string>`,默认值: [块 HTML 元素](https://github.com/remarkjs/remark/blob/main/packages/remark-parse/lib/block-elements.js)) (中文(简体) ).

```markdown
<block>foo
</block>
```

定义哪些 HTML 元素被视为块级.

### `parse.Parser`

进入 [解析器](https://github.com/unifiedjs/unified#processorparser)如果你需要的话.

## 扩展 `Parser`

一般情况下,使用 [_变压器_](https://github.com/unifiedjs/unified#function-transformernode-file-next) 操作语法树 实现预期产出. 有时,例如,在引入新的、带有某种 优先, 需要与 parser 接口 .

如果 `remark-parse` 插件被使用, 它添加了一个 [`Parser`](https://github.com/unifiedjs/unified#processorparser) 构造器 函数到 `processor`。 。 。 . 其他插件可以在其原型中添加活化器来改变Markdown的特性 解说.

以下插件添加一个 [指示器](https://npmcn.com/package/%40brodybits/remark-parse/#readme-function-tokenizereat-value-silent) 为了纪念.

```js
module.exports = mentions

function mentions() {
  var Parser = this.Parser
  var tokenizers = Parser.prototype.inlineTokenizers
  var methods = Parser.prototype.inlineMethods

  // Add an inline tokenizer (defined in the following example).
  tokenizers.mention = tokenizeMention

  // Run it just before `text`.
  methods.splice(methods.indexOf('text'), 0, 'mention')
}
```

### `Parser#blockTokenizers`

姓名地图 [指示器](https://npmcn.com/package/%40brodybits/remark-parse/#readme-function-tokenizereat-value-silent)s (单位:千美元)`Object.<Function>`) (中文(简体) ). 这些标志剂(例如: `fencedCode`, (中文(简体) ), `table`,以及 `paragraph`吃从 开始到行结束的值.

见 `#blockMethods` 以下列出默认列入的方法.

### `Parser#blockMethods`

清单 `blockTokenizers` 名称 (`Array.<string>`) (中文(简体) ). 指定显示器运行的顺序.

默认块法的优先权如下:

-   `blankLine`
-   `indentedCode`
-   `fencedCode`
-   `blockquote`
-   `atxHeading`
-   `thematicBreak`
-   `list`
-   `setextHeading`
-   `html`
-   `definition`
-   `table`
-   `paragraph`

### `Parser#inlineTokenizers`

姓名地图 [指示器](https://npmcn.com/package/%40brodybits/remark-parse/#readme-function-tokenizereat-value-silent)s (单位:千美元)`Object.<Function>`) (中文(简体) ). 这些标志剂(例如: `url`, (中文(简体) ), `reference`,以及 `emphasis`从头开始吃 价值. 为了提高业绩,他们依赖 [定位器](https://npmcn.com/package/%40brodybits/remark-parse/#readme-tokenizerlocatorvalue-fromindex)编号.

见 `#inlineMethods` 以下列出默认列入的方法.

### `Parser#inlineMethods`

清单 `inlineTokenizers` 名称 (`Array.<string>`) (中文(简体) ). 指定显示器运行的顺序.

默认内线方法的优先顺序如下:

-   `escape`
-   `autoLink`
-   `url`
-   `email`
-   `html`
-   `link`
-   `reference`
-   `strong`
-   `emphasis`
-   `deletion`
-   `code`
-   `break`
-   `text`

### `function tokenizer(eat, value, silent)`

活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活. 两者都是功能,工作相同,但内含的活化剂必须具有 [定位器](https://npmcn.com/package/%40brodybits/remark-parse/#readme-tokenizerlocatorvalue-fromindex)。 。 。 .

以下示例显示引用后添加的内置指示器 上面的插件 .

```js
tokenizeMention.notInLink = true
tokenizeMention.locator = locateMention

function tokenizeMention(eat, value, silent) {
  var match = /^@(\w+)/.exec(value)

  if (match) {
    if (silent) {
      return true
    }

    return eat(match[0])({
      type: 'link',
      url: 'https://social-network/' + match[1],
      children: [{type: 'text', value: match[0]}]
    })
  }
}
```

切换器 _测试_ 文档是否从某个合成实体开始. 单位 _无声_ 模式,他们返回 无论测试通过. 单位 _常规_ 模式,它们会消耗这个符号,这个过程被称为“吃”.

定位器通过提供下一个位置,使内置指示器能够更快地运行 实体可能发生.

###### 签署

-   `Node? = tokenizer(eat, value)`
-   `boolean? = tokenizer(eat, value, silent)`

###### 参数

-   `eat` (单位:千美元)[`Function`](https://npmcn.com/package/%40brodybits/remark-parse/#readme-eatsubvalue)——在适用情况下,吃一个实体
-   `value` (单位:千美元)`string`——可启动实体的价值
-   `silent` (单位:千美元)`boolean`——是检测还是消费

###### 属性

-   `locator` (单位:千美元)[`Function`](https://npmcn.com/package/%40brodybits/remark-parse/#readme-tokenizerlocatorvalue-fromindex)) - 内置活化剂所需
-   `onlyAtStart` (单位:千美元)`boolean`) — 节点是否只能在开头找到 文件编号
-   `notInBlock` (单位:千美元)`boolean`)——节点是否不能在块引用或列表中
-   `notInList` (单位:千美元)`boolean`)——节点是否不能列在列表中
-   `notInLink` (单位:千美元)`boolean`) — 节点不能在链接中

###### 回返

-   `boolean?`输入 _无声_ 模式——在开始时是否可以找到一个节点 `value`
-   [`Node?`](https://github.com/syntax-tree/unist#node)输入 _常规_ 模式 - 如果可以在开始时找到 `value`

### `tokenizer.locator(value, fromIndex)`

内置活化活化器需要定位器. 他们的作用是继续分析表演者.

下面的示例显示一个位置符,该位置符由引用的标注符所添加 见上文.

```js
function locateMention(value, fromIndex) {
  return value.indexOf('@', fromIndex)
}
```

定位器通过提供下列信息,使内置的标识器能够更快地运行: 下一个实体的位置 _可能_ 发生. 定位器可能是错误的, 如果实际上没有节点可以找到 索引它们返回.

###### 参数

-   `value` (单位:千美元)`string`——可能包含一个实体的价值
-   `fromIndex` (单位:千美元)`number`—— 开始搜索的位置

###### 回返

`number` 实体可开始使用的指数,以及 `-1` 否则.

### `eat(subvalue)`

```js
var add = eat('foo')
```

吃饭 `subvalue`,此字符串在开始 [符号化](https://npmcn.com/package/%40brodybits/remark-parse/#readme-function-tokenizereat-value-silent) `value`。 。 。 .

###### 参数

-   `subvalue` (单位:千美元)`string`\- 食用价值

###### 回返

[`add`](https://npmcn.com/package/%40brodybits/remark-parse/#readme-addnode-parent)。 。 。 .

### `add(node[, parent])`

```js
var add = eat('foo')

add({type: 'text', value: 'foo'})
```

添加 [职位信息](https://github.com/syntax-tree/unist#position) 改为 `node` 添加 `node` 改为 `parent`。 。 。 .

###### 参数

-   `node` (单位:千美元)[`Node`](https://github.com/syntax-tree/unist#node)) - 连接位置并添加的节点
-   `parent` (单位:千美元)[`Parent`](https://github.com/syntax-tree/unist#parent),可选) - 要添加的位置 `node` 改为 语法树. 默认当前处理的节点

###### 回返

[`Node`](https://github.com/syntax-tree/unist#node) - 给定的 `node`。 。 。 .

### `add.test()`

拿着 [职位信息](https://github.com/syntax-tree/unist#position) 将补丁到 `node` 以 `add`。 。 。 .

###### 回返

[`Position`](https://github.com/syntax-tree/unist#position)。 。 。 .

### `add.reset(node[, parent])`

`add`,但重新设置内部位置. 例如,在列表中,同一内容首先被用于列表, 以及后来的清单项目.

###### 参数

-   `node` (单位:千美元)[`Node`](https://github.com/syntax-tree/unist#node)) - 连接位置并插入的节点
-   `parent` (单位:千美元)[`Node`](https://github.com/syntax-tree/unist#node),可选) - 要添加的位置 `node` 改为 语法树. 默认当前处理的节点

###### 回返

[`Node`](https://github.com/syntax-tree/unist#node) - 给定的节点.

### 关掉一个标识器

在某些情况下,你可能想要关闭一个示意器 以避免分析 综合特征.

最好是使用 [`remark-disable-tokenizers`](https://github.com/zestedesavoir/zmarkdown/tree/HEAD/packages/remark-disable-tokenizers) 关闭指示器的插件 .

或者,可以将标语替换为: `blockTokenizers` (或 `blockMethods`)或(或) `inlineTokenizers` (或 `inlineMethods`) (中文(简体) ).

以下示例关闭缩进的代码块:

```js
remarkParse.Parser.prototype.blockTokenizers.indentedCode = indentedCode

function indentedCode() {
  return true
}
```

## 警卫

由于Markdown有时被用于 HTML, 不当使用 HTML 可以打开您 改为 [跨站点脚本( XSS)](https://en.wikipedia.org/wiki/Cross-site_scripting) 攻击、言论的使用也可能不安全. 到 HTML 时,请结合 [**复韵**](https://github.com/rehypejs/rehype) 生态系统和用途 [`rehype-sanitize`](https://github.com/rehypejs/rehype-sanitize) 让树安全.

使用备注插件也可以为您打开其它攻击功能 . 仔细评估每个插件以及使用它们所涉及的风险.

## 贡献

见 [`contributing.md`](https://github.com/remarkjs/.github/blob/HEAD/contributing.md) 内 [`remarkjs/.github`](https://github.com/remarkjs/.github) 办法 要开始. 见 [`support.md`](https://github.com/remarkjs/.github/blob/HEAD/support.md) 为了寻求帮助. 对新插件和工具的想法可以发布于 [`remarkjs/ideas`](https://github.com/remarkjs/ideas)。 。 。 .

优秀的言论资源清单可见于 [**厉害 评论**](https://github.com/remarkjs/awesome-remark)。 。 。 .

这个项目有一个 [行为守则](https://github.com/remarkjs/.github/blob/HEAD/code-of-conduct.md)。 。 。 . 通过与这个寄存器,组织或社区的互动,你同意 遵守它的规定.

## 许可证

[麻省理工学院](https://github.com/remarkjs/remark/blob/main/license) © [Titus 虫类](https://wooorm.com/)

## 常见问题

### @brodybits/remark-parse 是什么？

解析 Markdown 的注释插件

### 如何安装 @brodybits/remark-parse？

在项目目录运行 npm install @brodybits/remark-parse，或使用 pnpm add / yarn add / bun add。

### @brodybits/remark-parse 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @brodybits/remark-parse 可以商用吗？

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

### @brodybits/remark-parse 的下载量有多少？

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

### @brodybits/remark-parse 还在维护吗？

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

