关于 markstream-nuxt
面向 Nuxt 3 或 4 应用的 Markstream 集成技能,重点处理服务端渲染边界。内容涵盖客户端专用依赖、CSS、渲染模式、流式输出及 SSR 验证。
主要功能
- 01Nuxt 3 和 4 集成指导
- 02浏览器依赖的客户端边界
- 03显式配置 Markstream CSS
- 04渲染模式与流式输出指导
- 05面向 SSR 的验证
适用场景
- 01在 Nuxt 应用中接入 Markstream
- 02避免浏览器专用依赖进入服务端路径
- 03配置流式聊天渲染
- 04避免 SSR 水合问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ simon-he95/ markstream-vue --skill markstream-nuxt安装后在 Claude Code 中输入/markstream-nuxt确认已加载。
附带文件agents/openai.yaml
详细介绍
Markstream Nuxt
当宿主应用使用 Nuxt,且 SSR 边界很重要时,请使用此技能。
工作流
- 确认仓库使用的是 Nuxt 3 或 4。
- 安装
markstream-vue,以及所请求功能所必需的可选对等依赖。 - 将仅限浏览器的对等依赖置于仅客户端边界内。
- 优先使用
<client-only>包装器、.client插件或带保护的 setup 路径。
- 优先使用
- 从客户端安全的应用外壳或插件中导入
markstream-vue/index.css。- 根 JS 导入不会注入样式;请显式使用
markstream-vue/index.css或markstream-vue/index.px.css。
- 根 JS 导入不会注入样式;请显式使用
- 从
content开始,根据界面选择渲染器模式;只有在 UI 需要自定义 AST 控制时,才改用nodes和final。- 对于 AI 聊天或 SSE 输出,使用
mode="chat"。它采用轻量批次、fade=false和max-live-nodes=0;smooth-streaming="auto"会调节可见输出的节奏。 - 对于丰富的文档界面,使用
mode="docs"。这是默认模式,会启用较大的批次、工具提示和淡入效果。 - 对于轻量的非聊天界面,使用
mode="minimal"。 - 常规围栏代码块使用内置渲染器;安装可选对等依赖后,
stream-diffs会增强该渲染器。使用render-code-blocks-as-pre可强制采用纯文本路径,或使用setCustomComponents(customId, { code_block: ... })指定由应用管理的渲染器。 typewriter仅控制闪烁光标,默认值为false。高频聊天场景优先使用typewriter="simple"。- 在 Vue 3(包括 Nuxt)中,
smooth-streaming控制输出节奏,fade控制不透明度;两者可以同时启用。mode="chat"默认采用轻量配置fade=false。需要逐渐显示文本时添加fade;更注重动画开销时则保持关闭。Vue 3 的追加淡入使用稳定批次(200 ms、50 ms 合并窗口,每个文本节点最多四个批次);后续追加不会重启之前的批次。 - 流式输出与恢复历史记录:在聊天 UI 中,同一个
MarkdownRender会先开始流式输出,随后在final=true时切换为历史记录。- 流式输出:从
mode="chat"和final开始;需要显示文本时添加fade,仅在需要光标时添加typewriter。 - 恢复或已完成的聊天历史记录:在同一聊天行中保持
mode="chat";使用:smooth-streaming="false"、typewriter=false,并根据所需的进入或显示效果独立选择是否启用fade。除非这是有意设定的视觉策略,否则不要将其绑定为流式状态的反值。 - 对轻量的非聊天恢复内容使用
mode="minimal";仅对丰富的文档界面使用mode="docs"。
- 流式输出:从
- 在 SSR 中,避免对首屏内容使用
smooth-streaming="true";auto内部的挂载门控可避免水合不匹配。 - 请注意,
html-policy现在默认设为safe,并且通过mermaid-props默认启用 Mermaid 严格模式。
- 对于 AI 聊天或 SSE 输出,使用
- 使用最精简且相关的 Nuxt 开发、构建或类型检查命令进行验证。
默认决策
- SSR 安全性优先于功能完整性。
- 只有当界面应使用丰富文档默认值时,才省略
mode。 - 在默认的
auto模式下,平滑流式传输是 SSR 安全的,因为它会在挂载时启用。首屏 SSR 内容不要使用smooth-streaming="true"——它会绕过挂载门控,可能导致 hydration 不匹配或短暂空白。 - 对于非虚拟化聊天滚动区域,请从
markstream-vue/utils导入useStickToBottom,并在 Vue 提交新内容后调用scheduleScrollToBottom()。该组合式函数会在挂载后添加浏览器事件监听器;对于较长的混合时间线,请使用stick-to-bottom="auto"的MarkstreamVirtualTimeline。 - 避免在服务端代码路径中于导入时访问浏览器全局对象。
- 除非仓库中已有经过验证的 SSR 模式,否则应将增强代码运行时、Mermaid workers 和类似的大型依赖视为仅限客户端使用。
- 对于大型代码块,可选的线程外高亮池(从
markstream-vue导入setStreamDiffsWorkerPool,其底层使用上游@pierre/diffs的WorkerPoolManager)也仅限客户端使用:应在仅限客户端的插件或组件中注入,切勿在服务端代码路径中注入。 - 所有 Markstream 包中的增强代码块都使用
stream-diffs;不要安装stream-monaco。 - 对于受支持的内置代码界面配置,请使用顶层的
code-block-options。主题、代码/语言、流式生命周期、标题栏、挂载、显示和释放均由 Markstream 控制。 - 除非任务要求保留受信任的旧式渲染,否则请保持
html-policy="safe"和 Mermaid 严格模式。 - 如果受信任的仅限客户端界面需要旧行为,请在局部使用
html-policy="trusted"和:mermaid-props="{ isStrict: false }"退出默认设置,并说明该界面为何可信。
有用的文档目标
docs/nuxt-ssr.mddocs/guide/installation.mddocs/guide/usage.mddocs/guide/troubleshooting.md
评论
支持 Markdown