使用 MDX

Rspress 支持 MDX,这是一种功能强大的内容开发方式。

Markdown

MDX 是 Markdown 的超集,这意味着你可以像往常一样编写 Markdown 文件。例如:

# Hello world

Front matter

你可以在 Markdown 文件的顶部添加 front matter,它是一个特殊部分,使用 YAML 格式来定义元数据,被包含在文件顶部的三个连字符 --- 之间。

例如使用 title 来指定页面的标题:

---
title: Hello world
---

你还可以在正文中访问 front matter 中定义的属性,例如:

---
title: Hello world
---

# {frontmatter.title}

前面定义的属性将作为 frontmatter 属性传递给组件。所以最终输出将是:

<h1>Hello world</h1>
TIP

查看 Front matter 配置 了解可用的 front matter 配置。

自定义容器

::: 语法

你可以使用 ::: 语法来创建自定义容器,且支持自定义标题。例如:

输入:

:::note
这是一个 `note` 类型的 `block`
:::

:::tip
这是一个 `tip` 类型的 `block`
:::

:::info
这是一个 `info` 类型的 `block`
:::

:::warning
这是一个 `warning` 类型的 `block`
:::

:::danger
这是一个 `danger` 类型的 `block`
:::

:::details
这是一个 `details` of type `block`
:::

:::tip 自定义标题
自定义标题的 `block`
:::

:::tip{title=自定义标题}
自定义标题的 `block`
:::

输出:

NOTE

这是一个 note 类型的 block

TIP

这是一个 tip 类型的 block

INFO

这是一个 info 类型的 block

WARNING

这是一个 warning 类型的 block

DANGER

这是一个 danger 类型的 block

DETAILS

这是一个 details of type block

自定义标题

自定义标题的 block

自定义标题

自定义标题的 block

GitHub Markdown alerts 语法

你可以使用 GitHub Markdown Alerts 语法 来创建自定义容器。

Input:

> [!NOTE]
> 这是一个 `note` 类型的 `block`

> [!TIP]
> 这是一个 `tip` 类型的 `block`

> [!INFO]
> 这是一个 `info` 类型的 `block`

> [!WARNING]
> 这是一个 `warning` 类型的 `block`

> [!DANGER]
> 这是一个 `danger` 类型的 `block`

> [!DETAILS]
> 这是一个 `details` 类型的 `block`

Output:

NOTE

这是一个 note 类型的 block

TIP

这是一个 tip 类型的 block

INFO

这是一个 info 类型的 block

WARNING

这是一个 warning 类型的 block

DANGER

这是一个 danger 类型的 block

DETAILS

这是一个 details 类型的 block

代码块

基本使用

你可以使用 ``` 语法来创建代码块,且支持自定义标题。例如:

输入:

```js
console.log('Hello World');
```

```js title="hello.js"
console.log('Hello World');
```

输出:

console.log('Hello World');
hello.js
console.log('Hello World');

代码行高亮

你可以通过如下的语法指定代码行高亮,比如:

输入:

```js {1,3-5}
console.log('Hello World');

const a = 1;
console.log(a);
const b = 2;
console.log(b);
```

输出:

console.log('Hello World');

const a = 1;
console.log(a);
const b = 2;
console.log(b);

你也可以同时应用代码行高亮和代码块标题,比如:

输入:

```js title="hello.js" {1,3-5}
console.log('Hello World');

const a = 1;

console.log(a);

const b = 2;

console.log(b);
```

输出:

hello.js
console.log('Hello World');

const a = 1;

console.log(a);

const b = 2;

console.log(b);

显示代码行号

如果你想要显示代码行号,你可以在配置文件中开启 showLineNumbers 选项:

rspress.config.ts
export default {
  // ...
  markdown: {
    showLineNumbers: true,
  },
};

Wrap code

如果你想要默认启用长代码换行展示,你可以在配置文件中开启 defaultWrapCode 选项:

rspress.config.ts
export default {
  // ...
  markdown: {
    defaultWrapCode: true,
  },
};

自定义锚点 id

默认情况下,Rspress 会根据各个标题的内容自动生成 id,这个 id 也会作为锚点的内容,你可以通过如下的语法来自定义 header 的 id:

## Hello world \{#custom-id}

其中 custom-id 就是你自定义的 id。