尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Storybook 文档页自定义语法高亮:用 react-syntax-highlighter 为 MDX 文档添加 SCSS 高亮支持
Storybook 文档页自定义语法高亮用 react-syntax-highlighter 为 MDX 文档添加 SCSS 高亮支持【免费下载链接】storybookStorybook is the industry standard workshop for building, documenting, and testing UI components in isolation项目地址: https://gitcode.com/GitHub_Trending/st/storybook本篇技术指南聚焦 Storybook 的 MDX 文档页面如何接入自定义语法高亮方案以仓库中的官方示例片段 my-component-with-custom-syntax-highlight.md 为核心完整讲解如何在单个文档页内通过react-syntax-highlighter的 Prism 引擎为 SCSS 等默认不支持的语言启用高亮并结合 Storybook 核心源码说明内置高亮器的语言注册机制与可替换点。读完后你将掌握单页级自定义高亮的完整写法、全局注册语言的替代路径以及两种方案在源码层面的对应关系。背景Storybook 内置语法高亮的覆盖范围与限制Storybook 的 Docs 页面默认会对代码块进行语法高亮。从核心源码 syntaxhighlighter.tsx 可以看到Storybook 内部的高亮组件基于react-syntax-highlighter的PrismLight构建并预注册了如下语言集合export const supportedLanguages { jsextra: jsExtras, jsx, json, yml, md, bash, css, html, tsx, typescript, graphql, }; Object.entries(supportedLanguages).forEach(([key, val]) { ReactSyntaxHighlighter.registerLanguage(key, val); });即默认支持 JavaScript/JSX、TypeScript/TSX、JSON、YAML、Markdown、Bash、CSS、HTML、GraphQL。需要特别注意的是SCSS 并不在默认语言列表中因此 Markdown 文档中写出的scss代码块不会被自动高亮。FAQ 中对此也有明确说明内置高亮覆盖 JS、Markdown、CSS、HTML、TypeScript、GraphQL 等语言而通过 API 注册自定义语言存在已知限制见 docs/faq.mdx 中 syntax highlight 相关条目。正因如此官方示例给出了在单个 MDX 文档内直接引入 react-syntax-highlighter 自带高亮器的自包含方案——这也是本文要展开的主题。单页自定义高亮的完整示例以下示例来自 my-component-with-custom-syntax-highlight.md演示在一个名为MyComponent.mdx的文档页中为 SCSS 代码块启用高亮。注意原片段中用双引号包裹的 SCSS 代码块是文档站渲染片段时的占位写法拷贝到你自己项目时必须还原为三个反引号。import { Meta } from storybook/addon-docs/blocks; import { Prism as SyntaxHighlighter } from react-syntax-highlighter; Meta titleA Storybook doc with a custom syntax highlight for SCSS / # SCSS example This is a sample SCSS code block example highlighted in Storybook scss $font-stack: Helvetica, sans-serif; $primary-color: #333; body { font: 100% $font-stack; color: $primary-color; }export const Component () { return ; };示例中逐行说明三个关键要素 **1. 从 addon-docs 导入 Meta 设置文档元信息** mdx import { Meta } from storybook/addon-docs/blocks; Meta titleA Storybook doc with a custom syntax highlight for SCSS /Meta用于声明该文档页的 title使自定义高亮文档可以独立于任何组件存在标题 A Storybook doc with a custom syntax highlight for SCSS 即为此例的文档页名称。2. 直接导入 react-syntax-highlighter 的 Prism 高亮器import { Prism as SyntaxHighlighter } from react-syntax-highlighter;这里把Prism别名导入为SyntaxHighlighter。示例中的注释特意强调这一点是有意为之The usage of this Component is intentional to enable react-syntax-highlighters own highlighterStorybook 的核心组件与react-syntax-highlighter使用同一个 PrismLight 运行时因此在 MDX 页面中显式渲染SyntaxHighlighter/能直接激活该库自身的高亮管线而不是依赖 Storybook 封装层的默认行为。3. 导出Component组件以激活高亮器export const Component () { return SyntaxHighlighter/; };在 MDX 文档页中导出的Component会被渲染在文档主体位置。返回一个空的SyntaxHighlighter/组件本身就是目的所在——它让 Prism 高亮器在该页面上下文中生效从而页面上的scss代码块得以按其内置语言定义被着色。4. 被高亮的 SCSS 代码块$font-stack: Helvetica, sans-serif; $primary-color: #333; body { font: 100% $font-stack; color: $primary-color; }这是一个典型的 SCSS 片段变量定义 嵌套引用用来验证 SCSS 语法$开头的变量、颜色值、选择器能够被正确着色而不再是纯文本样式。源码印证为什么替换高亮器是可行的从核心实现看Storybook 的 SyntaxHighlighter 组件 内部就是包装了react-syntax-highlighter/dist/esm/prism-light组件在挂载时通过ReactSyntaxHighlighter.registerLanguage(key, val)逐个注册内置语言syntaxhighlighter.tsx同时对外暴露了SyntaxHighlighter.registerLanguage静态方法直接转发到 PrismLight 的注册接口syntaxhighlighter.tsxSyntaxHighlighter.registerLanguage ( ...args: Parameterstypeof ReactSyntaxHighlighter.registerLanguage ) ReactSyntaxHighlighter.registerLanguage(...args);组件的 props 类型定义在 syntaxhighlighter-types.ts其中SupportedLanguage text | keyof typeof supportedLanguages——也就是说未注册的语言会退化为text这正是 SCSS 代码块默认不高亮的根因。由于底层与文档页示例共用同一套 Prism 运行时示例中直接渲染 react-syntax-highlighter 的SyntaxHighlighter/才能与文档页面的渲染环境协同工作。替代方案在 preview 中全局注册语言如果你的目标不是单页自定义而是让整个 Storybook 的所有文档页都支持某语言如 SCSS可以在.storybook/preview文件中全局注册。仓库中对应的示例片段为 storybook-preview-register-language-globally.md核心写法为// .storybook/preview.ts import { PrismLight as SyntaxHighlighter } from react-syntax-highlighter; import scss from react-syntax-highlighter/dist/esm/languages/prism/scss; // Registers and enables scss language support SyntaxHighlighter.registerLanguage(scss, scss);该片段同时提供了 JS/TS、CSF 3 与 CSF NextdefinePreview、以及 React/Vue/Angular/Web Components 等各框架的变体。而配套的纯文档效果示例见 my-component-with-global-syntax-highlight.md——其中 SCSS 代码块无需在文档页内做任何 import 或导出直接写scss即可高亮。两种方案的取舍可以归纳为方案作用域改动位置适用场景MDX 页面内引入SyntaxHighlighter/本文主方案单个文档页目标.mdx文件只有一两页需要特殊语言高亮不想改动全局配置preview 中registerLanguage全部文档页.storybook/preview.(ts\|js)团队统一需要某语言如 SCSS/LESS高亮此外Docs 中Source文档块也支持通过language参数指定高亮语言见 doc-block-source.mdx但其可选语言同样受限于 Prism 运行时已注册的语言集合——这与前文源码分析相互印证。实操注意事项语言键名必须与注册名一致Prism 是按字符串键如scss、css匹配高亮器的代码块标注的语言名写错会静默退化为纯文本。默认语言表不含 SCSS/LESS内置集合只有 css 而无 scss任何 SCSS 高亮都依赖显式注册或本文的页面级方案。主题样式跟随 Storybook 主题核心高亮组件通过theme.code映射生成 Prism 样式syntaxhighlighter.tsx切换 Storybook 主题亮/暗时代码块配色会随之变化无需额外配置。MDX 转义细节示例片段源码中以代替是文档仓库自身的占位约定避免嵌套代码块截断实际项目中请使用标准 Markdown 围栏语法。组件渲染容错核心SyntaxHighlighter组件在children非字符串或为空时会直接返回nullsyntaxhighlighter.tsx即空代码块不会报错也不会渲染高亮容器排查代码块没高亮时可先检查内容是否为空字符串。小结本文围绕 Storybook 官方示例 my-component-with-custom-syntax-highlight.md 展开讲解了在 MDX 文档页内通过react-syntax-highlighter的Prism高亮器为 SCSS 启用自定义语法高亮的完整做法导入Meta声明文档页、导入Prism as SyntaxHighlighter并导出渲染它的Component、再配合标准scss代码块即可生效。结合 syntaxhighlighter.tsx 的源码可以看到该方案与 Storybook 内置高亮器共用 PrismLight 运行时而内置supportedLanguages集合不含 SCSS 这一事实也正是需要此类自定义方案的根本原因。若需要在整个项目中统一启用某语言则建议改用 storybook-preview-register-language-globally.md 所示的 preview 全局注册路径。【免费下载链接】storybookStorybook is the industry standard workshop for building, documenting, and testing UI components in isolation项目地址: https://gitcode.com/GitHub_Trending/st/storybook创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

Atmosphere-NX 上 RetroArch 报 0x4A8 崩溃:一步进高内存模式就能解决

Atmosphere-NX 上 RetroArch 报 0x4A8 崩溃:一步进高内存模式就能解决

Atmosphere-NX 上 RetroArch 报 0x4A8 崩溃:一步进高内存模式就能解决 【免费下载链接】Atmosphere Atmosphre is a work-in-progress customized firmware for the Nintendo Switch. 项目地址: https://gitcode.com/GitHub_Trending/at/Atmosphere 在 Atmos…

📅 2026/9/8 15:47:44
2026实测盘点:16款降AI率平台横评,效果差距有多大

2026实测盘点:16款降AI率平台横评,效果差距有多大

高校对AI生成内容的检测力度一年比一年紧,身边好几个研三的朋友被知网AIGC检测拦在送审门外,降AI率成了毕业季绕不开的环节。市面声称能做降AI率的平台一搜三十多款,宣传话术一个比一个猛,实际效果到底如何?我把市面上…

📅 2026/9/8 15:42:43
无需代码,几分钟部署OpenClaw自动化办公神器

无需代码,几分钟部署OpenClaw自动化办公神器

🔹 工具简述 OpenClaw 是一款备受开发者与办公人群青睐的开源本地智能工具,凭借离线本地运行、可视化图形面板、全流程自主任务处理三大核心特点,积累了众多忠实用户。与普通对话类 AI 产品不同,它能够直接调用电脑的软硬件操作权…

📅 2026/9/8 15:42:43
MORE NEWS

更多资讯

📰

人工智能“网红”编程语言Python进入山东小学课本

对于一些高中生, 甚至小学生而言, 除了要学英语外, 他们未来很可能还要多学一门“外语”。近日, 山东省在其最新出版的小学信息技术六年级教材中, 加入了相关内容。简要地讲, 它是一种在广泛范畴内被运用的高级编程语言, 归属于通用型编程语言类别, 是由荷兰人Guido van予以创造…

📰

Python自动化生成Word报告:从模板设计到批量输出的全流程实战

难道每天都要重复着复制粘贴去制作报告吗? 难道表格格式老是会错乱吗? 难道数据更新后就得手动去修改十几份文档吗? 这些问题会不会使你陷入抓狂的状态呢? 今天, 我们要通过完全解放双手, 从根源上解决Word报告制作的效率问题。手动制作报告的3大效率瓶颈你有没有碰到过这种…

📰

2025一季度人才供求趋势报告

一、整体的招聘需求呈现出一种态势, 这种态势是两级分化的, 具体表现为高科技白领类的职位数量在增多, 同时, 蓝领的需求同样也处于扩大的状态。1、人工智能技术相关职位增幅明显,机器人工程师增幅位居前五今年一季度, 有较多新发职位得以增长的那些岗位, 展现出显著的技术驱动…

📰

思科最大规模收购:2047 亿拿下 Splunk,“内幕”交易获 46000% 回报

作者 | 褚杏娟、核子可乐原来日志分析这么值钱?本周四, 思科公司宣称, 会收购网络安全软件厂商, 其收购价格为每股157美元。这笔以现金形式开展的交易, 总值约280亿美元 , 折合约2047亿元人民币, 此交易成为思科有史以来规模最大的收购活动。此次收购价格, 约占到思…

📰

LightGBM多变量时序预测完整指南:从特征构造到避坑

LightGBM多变量时序预测完整指南:从特征构造到避坑 【免费下载链接】LightGBM A fast, distributed, high performance gradient boosting (GBT, GBDT, GBRT, GBM or MART) framework based on decision tree algorithms, used for ranking, classification and man…

📰

煤矿输送带异物检测数据集解析与YOLO训练实战

简介:面向煤矿输送带异物检测场景的标注数据集,整体覆盖2220张图像场景,提供Pascal VOC与YOLO两种格式的矩形框标注,适用于目标检测模型的训练、评估与调优。压缩包共2000个文件,主要由1999个xml标注文件和1个txt说明文…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬