Docusaurus代码高亮:Prism.js和代码块的深度定制
在技术文档中,清晰易读的代码展示至关重要。Docusaurus作为现代开源文档网站构建工具,提供了基于Prism.js(Prism,语法高亮库)的强大代码块功能,支持语法高亮、行号显示、自定义主题等高级特性。本文将深入探讨如何在Docusaurus中配置和定制Prism.js代码高亮,帮助你打造专业级的代码展示效果。
Prism.js基础配置
Docusaurus默认集成Prism React Renderer作为代码高亮引擎,支持80+种编程语言。基础配置通过docusaurus.config.js文件完成,核心配置项位于themeConfig.prism节点:
import {themes as prismThemes} from 'prism-react-renderer';
export default {
themeConfig: {
prism: {
theme: prismThemes.palenight, // 浅色主题
darkTheme: prismThemes.dracula, // 深色主题
additionalLanguages: ['powershell', 'csharp'], // 额外语言支持
},
},
};
语言支持扩展
默认情况下,Docusaurus仅启用常见语言支持(JavaScript、HTML、CSS等)。如需添加其他语言(如Java、PHP),需通过additionalLanguages配置:
export default {
themeConfig: {
prism: {
additionalLanguages: ['java', 'php', 'rust'],
},
},
};
语言名称需与Prism组件名对应(可在node_modules/prismjs/components目录查看完整列表)。例如,C#语言需指定为csharp而非cs。
主题定制与扩展
内置主题切换
Docusaurus提供10+种预设主题,可通过导入prism-react-renderer的themes对象切换:
import {themes as prismThemes} from 'prism-react-renderer';
export default {
themeConfig: {
prism: {
theme: prismThemes.github, // GitHub风格主题
darkTheme: prismThemes.vsDark, // VS Code深色主题
},
},
};
自定义主题开发
对于高级用户,可通过创建主题对象实现完全定制。Docusaurus官方提供了增强版主题示例:
自定义主题示例(修改注释颜色):
export const customTheme = {
plain: {
color: '#393A34',
backgroundColor: '#f6f6f6',
},
styles: [
{
types: ['comment'],
style: {
color: '#6A9955',
fontStyle: 'italic',
},
},
// 其他语法样式定义...
],
};
在配置文件中引用自定义主题:
import {customTheme} from './src/utils/customPrismTheme';
export default {
themeConfig: {
prism: {
theme: customTheme,
},
},
};
代码块高级功能
行高亮与标记
Docusaurus支持三种行高亮方式,满足不同场景需求:
1. 元数据标记法
通过代码块元数据指定行号范围:
```jsx {1,4-6} showLineNumbers
import React from 'react';
function MyComponent(props) {
if (props.isBar) {
return <div>Bar</div>;
}
return <div>Foo</div>;
}
```
2. 魔法注释法
通过特殊注释标记高亮行(推荐使用,避免行号计算错误):
```jsx
function HighlightDemo() {
// highlight-next-line
const important = '这行将被高亮';
/* highlight-start */
const multiLine = [
'这部分',
'将被高亮',
];
/* highlight-end */
return null;
}
```
支持的注释风格包括://(C风格)、#(Bash风格)、<!-- -->(HTML风格)等。
3. 自定义高亮样式
通过CSS变量自定义高亮背景色:
:root {
--docusaurus-highlighted-code-line-bg: rgba(72, 77, 91, 0.3);
}
[data-theme='dark'] {
--docusaurus-highlighted-code-line-bg: rgba(100, 100, 100, 0.3);
}
交互式代码编辑器
Docusaurus通过@docusaurus/theme-live-codeblock插件提供实时编辑功能,支持代码实时运行:
npm install --save @docusaurus/theme-live-codeblock
配置插件后,使用live标记创建交互式代码块:
```jsx live
function Clock() {
const [time, setTime] = useState(new Date());
useEffect(() => {
const timer = setInterval(() => setTime(new Date()), 1000);
return () => clearInterval(timer);
}, []);
return <div>Current time: {time.toLocaleTimeString()}</div>;
}
```
深度定制与扩展
自定义语言支持
对于Prism未支持的语言,可通过主题组件扩展实现。执行以下命令生成语言定义模板:
npm run swizzle @docusaurus/theme-classic prism-include-languages
在生成的src/theme/prism-include-languages.js文件中添加自定义语言:
const prismIncludeLanguages = (Prism) => {
// 导入Prism官方语言定义
require('prismjs/components/prism-ini');
// 自定义语言定义
Prism.languages.myLang = {
keyword: /\b(if|else|then)\b/,
string: /"[^"]*"/,
};
};
代码块组件定制
通过Swizzle功能替换默认代码块组件,实现高级功能(如复制按钮、代码折叠等):
npm run swizzle @docusaurus/theme-classic CodeBlock
生成的src/theme/CodeBlock目录包含代码块渲染逻辑,可根据需求修改。
最佳实践与性能优化
- 按需加载语言:仅添加项目所需的语言支持,减少bundle体积
- 使用魔法注释:避免行号计算错误,提高文档可维护性
- 主题一致性:确保代码主题与文档整体风格协调
- 代码块分组:对相关代码块使用Tabs组件分组展示
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
<Tabs>
<TabItem value="js" label="JavaScript">
```js
console.log('Hello JavaScript');
```
</TabItem>
<TabItem value="ts" label="TypeScript">
```ts
console.log('Hello TypeScript');
```
</TabItem>
</Tabs>
总结
Docusaurus基于Prism.js提供了强大而灵活的代码展示能力,从基础的语法高亮到高级的交互式编辑,覆盖了技术文档的各种需求。通过本文介绍的配置和定制方法,你可以构建既美观又实用的代码展示效果。完整的代码块功能文档可参考官方文档。
合理利用代码高亮功能,不仅能提升文档的专业度,更能显著改善读者的阅读体验,让技术内容更易于理解和吸收。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



