js 实现bpmn
使用 bpmn-js 库实现 BPMN
bpmn-js 是一个基于 JavaScript 的 BPMN 2.0 渲染和建模工具库,适用于 Web 应用。以下是实现 BPMN 的基本步骤:
安装 bpmn-js:
npm install bpmn-js
引入库并初始化:
import BpmnViewer from 'bpmn-js/lib/Viewer';
import BpmnModeler from 'bpmn-js/lib/Modeler';
创建查看器实例:
const viewer = new BpmnViewer({
container: '#canvas'
});
加载 BPMN 图表:
viewer.importXML(xmlContent, function(err) {
if (err) {
console.error('导入失败', err);
} else {
console.log('图表渲染成功');
}
});
自定义建模器实现
创建建模器实例:
const modeler = new BpmnModeler({
container: '#canvas',
keyboard: {
bindTo: document
}
});
添加新元素:
modeler.get('create').start(event, 'bpmn:StartEvent');
保存图表:
modeler.saveXML({ format: true }, function(err, xml) {
console.log('BPMN XML:', xml);
});
添加自定义面板
扩展建模器:

import CustomModule from './custom-module';
const modeler = new BpmnModeler({
container: '#canvas',
additionalModules: [
CustomModule
]
});
创建自定义模块:
export default {
__init__: ['customContextPad'],
customContextPad: ['type', CustomContextPad]
};
处理事件交互
监听元素选择:
modeler.on('selection.changed', function(event) {
const element = event.newSelection[0];
console.log('选中元素:', element);
});
监听元素变化:
modeler.on('element.changed', function(event) {
console.log('元素变更:', event.element);
});
集成属性面板
安装属性面板:
npm install bpmn-js-properties-panel
配置属性面板:

import BpmnPropertiesPanelModule from 'bpmn-js-properties-panel';
import BpmnPropertiesProviderModule from 'bpmn-js-properties-panel/lib/provider/bpmn';
const modeler = new BpmnModeler({
container: '#canvas',
propertiesPanel: {
parent: '#properties'
},
additionalModules: [
BpmnPropertiesPanelModule,
BpmnPropertiesProviderModule
]
});
部署与使用建议
-
确保在页面中包含容器元素:
<div id="canvas"></div> <div id="properties"></div> -
处理跨域问题时应配置适当的 CORS 策略
-
对于大型图表考虑实现懒加载机制
-
生产环境建议使用 Webpack 或 Rollup 进行打包
-
考虑添加撤销/重做功能:
modeler.get('commandStack').undo(); modeler.get('commandStack').redo();
以上方法提供了从基础实现到高级定制的完整路径,可根据项目需求选择适当的功能组合。






