diff --git a/libs/mermaid-renderer/src/index.ts b/libs/mermaid-renderer/src/index.ts index 9a661f5..e17c2cd 100644 --- a/libs/mermaid-renderer/src/index.ts +++ b/libs/mermaid-renderer/src/index.ts @@ -1,5 +1,12 @@ -// 把 mermaid 默认导出包成 IIFE 全局 bundle。 -// yggdrasil-core 的 mermaid.ts 通过动态 import('/mermaid/mermaid.js') 拿到 .default。 +// 把 mermaid 包成 IIFE 全局 bundle。 +// +// 关键:vite IIFE + `export default X` 会产出 `window.MermaidRenderer.default = X` +// (多一层 .default)。为避免 mermaid.ts 取值时纠结这一层,这里把 mermaid 对象 +// 直接赋给 window.MermaidRenderer 作为构建时副作用,使 window.MermaidRenderer +// 本身即 mermaid API(initialize/render)。 import mermaid from 'mermaid'; +// 构建时副作用:把 mermaid 挂到全局。ES module 的顶层赋值会被 vite 保留。 +;(globalThis as unknown as { MermaidRenderer: typeof mermaid }).MermaidRenderer = mermaid; + export default mermaid; diff --git a/libs/yggdrasil-core/src/mermaid.ts b/libs/yggdrasil-core/src/mermaid.ts index 9a348ae..b7a3d42 100644 --- a/libs/yggdrasil-core/src/mermaid.ts +++ b/libs/yggdrasil-core/src/mermaid.ts @@ -1,10 +1,14 @@ /** * Mermaid 流程图懒加载渲染。 * - * 扫描 `pre > code.language-mermaid` 代码块,在进入视口时动态 import 独立 bundle + * 扫描 `pre > code.language-mermaid` 代码块,在进入视口时动态加载独立 IIFE bundle * `public/mermaid/mermaid.js`(~1MB,只在有图且可见时加载,不影响无图文章首屏), * 把 mermaid 源码渲染成 SVG 注入到父
。 * + * bundle 是 IIFE 格式(与项目其他前端库一致),挂全局变量 `window.MermaidRenderer`。 + * 故不能用 ES module 的 `import().default`(IIFE 无 export)——改用动态注入 + * `