Docusaurus代码高亮:Prism.js和代码块的深度定制

Docusaurus代码高亮:Prism.js和代码块的深度定制

【免费下载链接】docusaurus Easy to maintain open source documentation websites. 【免费下载链接】docusaurus 项目地址: https://gitcode.com/gh_mirrors/do/docusaurus

在技术文档中,清晰易读的代码展示至关重要。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-rendererthemes对象切换:

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目录包含代码块渲染逻辑,可根据需求修改。

最佳实践与性能优化

  1. 按需加载语言:仅添加项目所需的语言支持,减少bundle体积
  2. 使用魔法注释:避免行号计算错误,提高文档可维护性
  3. 主题一致性:确保代码主题与文档整体风格协调
  4. 代码块分组:对相关代码块使用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提供了强大而灵活的代码展示能力,从基础的语法高亮到高级的交互式编辑,覆盖了技术文档的各种需求。通过本文介绍的配置和定制方法,你可以构建既美观又实用的代码展示效果。完整的代码块功能文档可参考官方文档

合理利用代码高亮功能,不仅能提升文档的专业度,更能显著改善读者的阅读体验,让技术内容更易于理解和吸收。

【免费下载链接】docusaurus Easy to maintain open source documentation websites. 【免费下载链接】docusaurus 项目地址: https://gitcode.com/gh_mirrors/do/docusaurus

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值