排查问题
如果出现问题,请尝试下面这些通用解决方案:
- 在 SSR 中出现
window is not defined:在 Nuxt 中将客户端代码包装为<client-only>,在 Vite SSR 场景中用onMounted延迟初始化。 - 数学渲染失败:安装并引入
katex,同时在应用入口引入katex/dist/katex.min.css。 - Mermaid 渲染问题:升级到
mermaid>= 11,检查异步渲染日志。 - 若通过 CDN
<script>引入 KaTeX/Mermaid:确保首次渲染前window.katex/window.mermaid已就绪;或在加载完成后调用一次setKatexLoader(() => window.katex)/setMermaidLoader(() => window.mermaid)来重置 loader。 - 性能问题:确认
viewportPriority已启用,避免在单次 mount 中渲染大量重资产节点。
常见问题(FAQ)
Tailwind / CSS 覆盖样式:当项目使用 Tailwind 或组件库(如 shadcn)时,Tailwind 的工具类或全局样式可能会覆盖库本身的样式。请参考 Tailwind 集成指南以了解样式导入顺序和解决策略:
/zh/guide/tailwind。快速修复:
- 将
markstream-vue/index.css放进@layer components { ... }(详见 Tailwind 页面),稳定 CSS 顺序。 - Tailwind 里设置
prefix(例如tw-)减少与组件库 class 冲突。 - 用容器选择器或
:deep把覆盖范围限制在渲染区域。
说明:
markstream-vue的打包 CSS 会限定在内部.markstream-vue容器下(包含主题变量与 Tailwind 工具类),因此大多数冲突通常来自 reset/导入顺序在渲染区域内的覆盖,而不是库在全局“泄漏”样式。- 将
自定义样式:你可以通过覆盖
src/index.css中的 CSS 变量来自定义外观(例如--vscode-editor-background、--vscode-editor-foreground),或在你的应用样式中覆盖组件类。推荐使用@apply或将自定义样式限定到某个容器内。插槽优先:如果你需要更改组件内布局,先检查组件是否暴露了插槽(例如
header-left、header-right、loading)。插槽提供稳健的扩展点,无需替换组件内部实现。还是不够?试试
setCustomComponents(id, mapping)将节点渲染器替换为你自己的 Vue 组件,详见Advanced页面的示例;记得在 SPA 中及时removeCustomComponents清理映射以避免内存泄露。快速示例(将
code_block节点替换为自定义渲染器):tsimport { setCustomComponents } from 'markstream-vue' setCustomComponents('my-docs', { code_block: MyCustomCodeBlock, })这将告知所有带有
custom-id="my-docs"的MarkdownRender实例,使用MyCustomCodeBlock渲染code_block节点;更多示例请参见Advanced页面。重现与提单:遇到渲染异常或报错时,请先在
playground中尝试复现问题并提供最小 Markdown 示例(或使用托管的快速测试页面)。可以运行pnpm test进行本地测试以确认是否为回归问题。打开 issue 时请包含:- 可复现的最小 Markdown 示例(粘贴在 issue 中或放到 gist)。
- 在 playground 的复现步骤或
playground链接,以及运行环境信息(浏览器、Node 版本、Vite/Nuxt)。 - 错误堆栈或 console 输出。
优先提供一个
playground对应的复现链接;你也可以使用托管的快速测试以便快速调试:https://markstream-vue.simonhe.me/test
如果准备好了,使用快速创建 issue 链接:
https://github.com/Simon-He95/markstream-vue/issues/new?template=bug_report.yml
额外建议:如果你可以编写一个单测或集成测试来复现 bug,请将其放入
test/文件夹并在本地运行pnpm test,这通常能帮助维护者快速定位并修复回归。
样式错乱?先做这几件事
绝大部分渲染问题都源自 CSS 重置缺失、导入顺序不对,或者 Tailwind / UnoCSS 等工具类框架覆盖组件样式。提问前请按以下清单排查:
- 导入 reset —— 浏览器默认
p、dl、table、pre的 margin/padding 各不相同。先引入 reset(modern-css-reset、@unocss/reset、@tailwind base),再引入markstream-vue:
@import 'modern-css-reset';
@tailwind base;
@tailwind components;
@import 'markstream-vue/index.css';- 使用 CSS layer —— Tailwind/UnoCSS 在
@layer components/utilities中输出工具类,如果包的 CSS 在这些 layer 之前导入,样式可能被覆盖。把库的样式包裹在 layer 里:
@layer components {
@import 'markstream-vue/index.css';
}UnoCSS 也可以通过 preflights 注入:
import { defineConfig, presetUno } from 'unocss'
export default defineConfig({
presets: [presetUno()],
preflights: [
{
layer: 'components',
getCSS: () => '@import "markstream-vue/index.css";',
},
],
})确认同伴 CSS —— Monaco、KaTeX、Mermaid 都有自己的样式文件。缺少时会表现为空白编辑器或无样式公式。对照组件指南确认已引入对应 CSS。
用
custom-id限定覆盖范围 —— 集成到大型设计系统时,其他全局样式可能影响渲染器。给MarkdownRender传custom-id="docs",再通过[data-custom-id="docs"]编写覆盖,可避免污染其它页面。
如果上述步骤仍无法解决,请使用 pnpm play 启动 playground,准备一个只包含 CSS/Markdown 的最小示例并附带链接提 issue。