Rspress 支持 MDX,这是一种功能强大的内容开发方式。
MDX 是 Markdown 的超集,这意味着你可以像往常一样编写 Markdown 文件。例如:
# Hello World
当你想在 Markdown 文件中使用 React 组件时,你应该使用 .mdx
扩展名来命名你的文件。例如:
// docs/index.mdx
import { CustomComponent } from './custom';
# Hello World
<CustomComponent />
你可以在 Markdown 文件的开头添加 Front Matter,它是一个 YAML 格式的对象,用于定义一些元数据。例如:
---
title: Hello World
---
注意:默认情况下,Rspress 使用 h1 标题作为 html 的标题。
你还可以在正文中访问 Front Mattter 中定义的属性,例如:
---
title: Hello World
---
# {frontmatter.title}
前面定义的属性将作为 frontmatter
属性传递给组件。所以最终输出将是:
<h1>Hello World</h1>
你可以使用 :::
语法来创建自定义容器,且支持自定义标题。例如:
输入:
:::tip
这是一个 `tip` 类型的 `block`
:::
:::info
这是一个 `info` 类型的 `block`
:::
:::warning
这是一个 `warning` 类型的 `block`
:::
:::danger
这是一个 `danger` 类型的 `block`
:::
::: details
这是一个 `details` of type `block`
:::
:::tip 自定义标题
自定义标题的 `block`
:::
:::tip{title=自定义标题}
自定义标题的 `block`
:::
输出:
这是一个 tip
类型的 block
这是一个 info
类型的 block
这是一个 warning
类型的 block
这是一个 danger
类型的 block
这是一个 details
of type block
自定义标题的 block
自定义标题的 block
你可以使用 ``` 语法来创建代码块,且支持自定义标题。例如:
输入:
```js
console.log('Hello World');
```
```js title="hello.js"
console.log('Hello World');
```
输出:
console.log('Hello World');
console.log('Hello World');
你可以通过如下的语法指定代码行高亮,比如:
输入:
```js {1,3-5}
console.log('Hello World');
const a = 1;
console.log(a);
const b = 2;
console.log(b);
```
输出:
1console.log('Hello World');
2
3const a = 1;
4console.log(a);
5const b = 2;
6console.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);
```
输出:
1console.log('Hello World');
2
3const a = 1;
4
5console.log(a);
6
7const b = 2;
8
9console.log(b);
如果你想要显示代码行号,你可以在配置文件中开启 showLineNumbers
选项:
export default {
// ...
markdown: {
showLineNumbers: true,
},
};
你可以通过如下的配置开启 Rust 版本的 MDX 编译器:
import { defineConfig } from 'rspress/config';
export default defineConfig({
markdown: {
experimentalMdxRs: true,
},
});
这个功能底层基于 Rspress 自研的 @rspress/mdx-rs 库来实现,性能比 JS 版本的 MDX 编译器提升 10 倍以上,但目前还不支持 JS 版本的插件,如果你需要加入自定义的 remark 或 rehype 插件,建议不要开启这个功能。