@file-viewer/renderer-drawing

中文文档
3.3.3发布于 2026/10/31Apache-2.0TypeScriptES Module构建来源已验证近 30 天下载 3.7万

Draw.io, Excalidraw, 美人鱼和PlantUML 渲染器用于文件查看器, 带有选入的 BPMN 查看器.

中文使用文档
文档目录3 节
  1. 特性
  2. 使用
  3. 显式启用 BPMN(实验性)

@file-viewer/renderer-drawing

English · 简体中文

Flyfish File Viewer 的独立绘图渲染器,覆盖 drawio、dio、excalidraw、mermaid、mmd、plantuml 和 puml。

特性

  • drawio / dio 默认使用随 viewer assets 分发的 diagrams.net offline viewer。
  • excalidraw 默认使用 roughjs 生成稳定只读 SVG;如果运行环境已提供官方 @excalidraw/excalidraw ESM 模块,会优先尝试 restore 与 exportToSvg,失败时自动回退。
  • mermaid / mmd 按需加载官方 mermaid,输出主题适配 SVG。
  • plantuml / puml 默认保持离线 SVG 源码预览;需要完整 PlantUML 渲染时,可通过 options.drawing.plantumlServerUrl 指向自托管 SVG 端点,端点不可用时仍会回落到离线预览,避免白屏或 broken image。
  • Mermaid / PlantUML 预览使用 @panzoom/panzoom 提供拖拽平移、Ctrl/Command 滚轮缩放和统一工具栏缩放联动。
  • 支持统一缩放、打印、HTML 导出和 options.drawing 自托管资源配置。
  • 独立安装、独立发布,适合只需要绘图预览的业务按需装配。
  • @file-viewer/core 已不再内置 drawing renderer,也不再直接依赖 @excalidraw/excalidraw、mermaid、plantuml-encoder、@panzoom/panzoom 或 roughjs。

使用

import { createFileViewerCore, createFileViewerRendererRegistry } from '@file-viewer/core';
import { drawingRenderer } from '@file-viewer/renderer-drawing';

const registry = createFileViewerRendererRegistry({
  renderers: [drawingRenderer],
});

const viewer = createFileViewerCore({
  target: document.querySelector('#viewer')!,
  rendererRegistry: registry,
});

完整按需加载方案见 官方文档。

显式启用 BPMN(实验性)

BPMN 2.0 使用独立子路径 /bpmn,不会自动加入普通 drawingRenderer、现有 preset 或 Full。安装可选引擎后显式注册:

npm install @file-viewer/core @file-viewer/renderer-drawing [email protected]
import { createFileViewerCore, createFileViewerRendererRegistry } from '@file-viewer/core';
import { bpmnRenderer } from '@file-viewer/renderer-drawing/bpmn';

const viewer = createFileViewerCore({
  target: document.querySelector('#viewer')!,
  rendererRegistry: createFileViewerRendererRegistry({ renderers: [bpmnRenderer] }),
});
  • 独立 renderer id 为 bpmn,仅注册 .bpmn,presets: []。
  • 使用官方只读 bpmn-js Viewer 绘制事件、任务、网关、泳池、泳道、消息流和子流程;有多个 BPMNDiagram 时可选择图。
  • 流程图与源码视图可切换。源码保留解码后的原 XML、BOM、换行、注释和扩展内容,不从引擎重新序列化生成。
  • 统一 zoom provider 与工具栏联动,支持拖拽平移、方向键平移、Ctrl/Command 滚轮缩放、适合窗口和原始比例。源码视图缩放字体,切回图时保留图的平移与缩放。
  • 没有 BPMN DI 布局时显示源码并说明原因,不虚构布局;无效 XML、DOCTYPE 或导入错误也保留源码。部分导入警告会显示在视图内。
  • 不执行流程脚本或 XML 中的代码;外部/变量颜色引用只从渲染副本中移除,原 XML 保留。引擎、样式均本地打包,无 CDN、远程解析或额外字体下载。
  • 官方 CSS 随延迟加载的运行时注入当前容器,支持普通 DOM 和 Shadow DOM,无需宿主另外导入 CSS。unmount() 注销缩放接口、事件、观察器并销毁引擎,支持多个实例及导入中取消。
  • 默认文件上限为 20 MiB。此入口不声明打印、HTML 导出、编辑或执行能力。

通过工厂配置初始视图或输入上限:

import { createBpmnRenderer, renderFileViewerBpmn } from '@file-viewer/renderer-drawing/bpmn';

const renderer = createBpmnRenderer({ initialView: 'source', maxFileBytes: 20 * 1024 * 1024 });
// 也可直接在具有明确高度的容器中渲染,无框架依赖。
const instance = await renderFileViewerBpmn(buffer, target, { options: { locale: 'zh-CN' }, signal });
await instance.ready;
instance.setView('source');
const originalXml = instance.getSource();
const diagrams = instance.getDiagrams();
// await instance.selectDiagram(diagrams[0].id);
await instance.unmount();

ready 在一次导入尝试结束后完成;文件错误通过可见状态与源码视图呈现。getDiagrams() 返回 id/name,selectDiagram(id) 串行打开对应图。context.signal 可取消本实例。

许可证: bpmn-js 的许可证要求保留并完整显示 bpmn.io 水印,不可删除、遮挡或裁切;并非 MIT。详见 THIRD_PARTY_NOTICES.md。包自身 Apache-2.0 不覆盖上游附加条款。

公开演示可复用独立构造的 simple-process.bpmn,许可证 CC0-1.0。GitHub #297 的 pizza 附件仅作本地验证输入,不随包或公开演示分发。

版本与发布记录

@file-viewer/renderer-drawing 共发布 57 个版本,首次发布于 2026/06/23;过去 12 个月发布了 57 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
3.3.3latest2026/10/3114 天前
3.3.12026/10/3015 天前
3.3.02026/10/2718 天前
3.2.22026/10/1827 天前
3.2.12026/10/1530 天前
3.2.02026/10/1530 天前

关于 @file-viewer/renderer-drawing 的常见问题

@file-viewer/renderer-drawing 是什么?

Draw.io, Excalidraw, 美人鱼和PlantUML 渲染器用于文件查看器, 带有选入的 BPMN 查看器.

如何安装 @file-viewer/renderer-drawing?

在项目目录运行 npm install @file-viewer/renderer-drawing,或使用 pnpm add / yarn add / bun add。

@file-viewer/renderer-drawing 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@file-viewer/renderer-drawing 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@file-viewer/renderer-drawing 可以商用吗?

@file-viewer/renderer-drawing 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@file-viewer/renderer-drawing 的下载量有多少?

根据 npm 官方下载统计,@file-viewer/renderer-drawing 在 2026/10/15 – 2026/11/13 这 30 天内被下载 37,198 次,日均约 1,240 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@file-viewer/renderer-drawing 还在维护吗?

最新版本 3.3.3 发布于 2026/10/31(14 天前);至今共发布 57 个版本,其中过去 12 个月发布了 57 个;首次发布于 2026/06/23。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。