[{"data":1,"prerenderedAt":203},["ShallowReactive",2],{"text-diagram-doc:\u002Fguide\u002Fdeployment":3},{"id":4,"title":5,"body":6,"description":191,"extension":192,"keywords":193,"locale":194,"meta":195,"navigation":196,"order":197,"path":198,"section":199,"seo":200,"stem":201,"__hash__":202},"docs\u002Fguide\u002Fdeployment.zh-CN.md","部署与资源",{"type":7,"value":8,"toc":184},"minimark",[9,14,38,41,44,58,65,69,80,87,90,116,119,122,157,180],[10,11,13],"h2",{"id":12},"浏览器与-ssr","浏览器与 SSR",[15,16,17,21,22,25,26,29,30,37],"p",{},[18,19,20],"code",{},"@quirekit\u002Ftext-diagram"," 根入口是纯模型与模板。SVG \u002F PNG 渲染、CodeMirror 和弹窗运行在浏览器，不能在 Nuxt 服务端 setup 中执行。工作台放在 ",[18,23,24],{},"ClientOnly"," 或 ",[18,27,28],{},".client.vue"," 边界，服务端可使用已保存 PNG 显示占位图。Nuxt 的 ",[31,32,36],"a",{"href":33,"rel":34},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fclient-only",[35],"nofollow","ClientOnly 文档","说明了客户端挂载边界。",[15,39,40],{},"本站使用 docs-kit 的客户端示例边界，静态构建依然输出教程和 API 正文，不把整个文档站退化成空白 SPA。",[10,42,43],{"id":43},"引擎资源必须一起部署",[15,45,46,47,49,50,53,54,57],{},"Mermaid 按需加载。PlantUML 官方 JavaScript 核心和 Graphviz WASM 打包在 ",[18,48,20],{}," 的 ",[18,51,52],{},"dist\u002Fdiagram-frame.iife.js"," 中，由包内 ",[18,55,56],{},"new URL(..., import.meta.url)"," 引用。",[15,59,60,61,64],{},"让打包器处理并发布该文件；不能只复制 ",[18,62,63],{},"browser.mjs"," 而丢掉资源，也不要把资源路径替换成一个远程渲染服务。Vite \u002F Nuxt 构建后检查静态目录含有该资源，并从最终静态产物实际打开 PlantUML、DOT 各一张图。首次使用需要加载站点脚本，本地渲染不等于网站自动具备离线缓存。",[10,66,68],{"id":67},"csp-与图片","CSP 与图片",[15,70,71,72,75,76,79],{},"PlantUML \u002F DOT 运行在只开放脚本的 ",[18,73,74],{},"srcdoc"," sandbox frame 中，没有 ",[18,77,78],{},"allow-same-origin","。frame 内策略只允许打包引擎所在源、WASM 执行和所需内联样式，禁止连接网络；应用更严格的父级策略仍可能阻止加载。",[15,81,82,83,86],{},"部署时逐项验证宿主的 frame、脚本源、WASM 与样式策略；工作台的 SVG 预览需要 Blob 图片，PNG 为 ",[18,84,85],{},"data:image\u002Fpng","。不要直接复制一条宽泛的 CSP 来放开整个应用。若策略不允许这些能力，保留源码\u002F已保存预览，提示编辑不可用。",[10,88,89],{"id":89},"许可产物",[15,91,92,93,96,97,100,101,104,105,96,108,111,112,115],{},"两个 QuireKit 包为 MIT。分发打包资源时保留包附带的 ",[18,94,95],{},"LICENSE.md","、",[18,98,99],{},"THIRD_PARTY_NOTICES.md"," 和绘图库的 ",[18,102,103],{},"ENGINE_LICENSES.txt","；第三方引擎仍适用其各自许可。本站从包内原文自动生成 ",[18,106,107],{},"\u002Flicenses\u002Fengines.txt",[18,109,110],{},"\u002Flicenses\u002Ftext-diagram.txt"," 与 ",[18,113,114],{},"\u002Flicenses\u002Fthird-party-notices.txt","，随静态产物一起分发。",[10,117,118],{"id":118},"本站开发与静态预览",[15,120,121],{},"在仓库根目录使用 Node 22 和 pnpm：",[123,124,129],"pre",{"className":125,"code":126,"language":127,"meta":128,"style":128},"language-sh shiki shiki-themes github-light github-light github-dark","pnpm --filter @quirekit\u002Ftext-diagram-docs dev\npnpm --filter @quirekit\u002Ftext-diagram-docs typecheck\npnpm --filter @quirekit\u002Ftext-diagram-docs build\npnpm --filter @quirekit\u002Ftext-diagram-docs test:browser\n","sh","",[18,130,131,139,145,151],{"__ignoreMap":128},[132,133,136],"span",{"class":134,"line":135},"line",1,[132,137,138],{},"pnpm --filter @quirekit\u002Ftext-diagram-docs dev\n",[132,140,142],{"class":134,"line":141},2,[132,143,144],{},"pnpm --filter @quirekit\u002Ftext-diagram-docs typecheck\n",[132,146,148],{"class":134,"line":147},3,[132,149,150],{},"pnpm --filter @quirekit\u002Ftext-diagram-docs build\n",[132,152,154],{"class":134,"line":153},4,[132,155,156],{},"pnpm --filter @quirekit\u002Ftext-diagram-docs test:browser\n",[15,158,159,160,163,164,167,168,171,172,175,176,179],{},"固定预览为 ",[18,161,162],{},"http:\u002F\u002F127.0.0.1:3260\u002F","，端口占用时直接失败。",[18,165,166],{},"build"," 输出 ",[18,169,170],{},"apps\u002Ftext-diagram-docs\u002F.output\u002Fpublic","，包括双语页面、raw Markdown、",[18,173,174],{},"llms.txt","、完整示例源码和引擎资源。规划域名为 ",[18,177,178],{},"text-diagram.quirekit.com","，当前交付不代表域名或 npm 已上线。",[181,182,183],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":128,"searchDepth":141,"depth":141,"links":185},[186,187,188,189,190],{"id":12,"depth":141,"text":13},{"id":43,"depth":141,"text":43},{"id":67,"depth":141,"text":68},{"id":89,"depth":141,"text":89},{"id":118,"depth":141,"text":118},"保留本地引擎资源，区分服务端模型和浏览器渲染，并验证生产策略。","md",null,"zh-CN",{},true,6,"\u002Fguide\u002Fdeployment","接入指南",{"title":5,"description":191},"guide\u002Fdeployment.zh-CN","tUTrdSMCxhYPPTlHmNioOQvNV3zVHiuWRoprS34rZmY",1793045390059]