代码块
文档中的代码块功能超级强大 💪。
代码块标题
你可以在语言声明之后添加一个 title
键,为代码块添加标题(请在它们之间留一个空格)。
```jsx title="/src/components/HelloCodeTitle.js"
function HelloCodeTitle(props) {
return <h1>你好, {props.name}</h1>;
}
```
function HelloCodeTitle(props) {
return <h1>你好, {props.name}</h1>;
}
语法高亮
代码块是由三反引号字符串包裹的文本块。你可以查阅这份 MDX 规范来了解更多细节。
```js
console.log('每个代码仓库都应该有一个吉祥物。');
```
为你的代码块使用匹配的语言元字符串,道格龙(Docusaurus)将自动应用语法高亮,这由 Prism React Renderer 提供支持。
console.log('每个代码仓库都应该有一个吉祥物。');
主题化
默认情况下,我们使用的 Prism 语法高亮主题是 Palenight。你可以通过在 docusaurus.config.js
的 themeConfig
中,为 prism
字段传递 theme
来更换主题。
例如,如果你更喜欢使用 dracula
高亮主题:
import {themes as prismThemes} from 'prism-react-renderer';
export default {
themeConfig: {
prism: {
theme: prismThemes.dracula,
},
},
};
因为 Prism 主题只是一个 JS 对象,如果你对默认主题不满意,也可以编写自己的主题。道格龙(Docusaurus)增强了 github
和 vsDark
主题以提供更丰富的高亮效果,你可以查看我们为亮色和暗色代码块主题的实现。
支持的语言
默认情况下,道格龙(Docusaurus)仅捆绑了常用语言的一个子集。
一些流行语言,如 Java、C# 或 PHP,默认并未启用。
要为其他任何 Prism 支持的语言添加语法高亮,请在 additionalLanguages
数组中定义它。
每个附加语言都必须是一个有效的 Prism 组件名称。例如,Prism 会将语言 cs
映射到 csharp
,但只有 prism-csharp.js
作为组件存在,所以你需要使用 additionalLanguages: ['csharp']
。你可以查看 node_modules/prismjs/components
目录来找到所有可用的组件(语言)。
例如,如果你想为 PowerShell 语言添加高亮:
export default {
// ...
themeConfig: {
prism: {
additionalLanguages: ['powershell'],
},
// ...
},
};
添加 additionalLanguages
后,请重启道格龙(Docusaurus)服务。
如果你想为 Prism 尚不支持的语言添加高亮,你可以 swizzle prism-include-languages
:
- npm
- Yarn
- pnpm
- Bun
npm run swizzle @docusaurus/theme-classic prism-include-languages
yarn swizzle @docusaurus/theme-classic prism-include-languages
pnpm run swizzle @docusaurus/theme-classic prism-include-languages
bun run swizzle @docusaurus/theme-classic prism-include-languages
这将在你的 src/theme
文件夹中生成 prism-include-languages.js
文件。你可以通过编辑 prism-include-languages.js
来为自定义语言添加高亮支持:
const prismIncludeLanguages = (Prism) => {
// ...
additionalLanguages.forEach((lang) => {
require(`prismjs/components/prism-${lang}`);
});
require('/path/to/your/prism-language-definition');
// ...
};
在编写自己的语言定义时,你可以参考 Prism 的官方语言定义。
添加自定义语言定义时,你不需要将该语言添加到 additionalLanguages
配置数组中,因为道格龙(Docusaurus)只在 Prism 提供的语言中查找 additionalLanguages
字符串。在 prism-include-languages.js
中添加语言导入就足够了。