如何将bpmn-js与Electron结合:打造跨平台桌面端流程建模应用完整教程
bpmn-js是一个功能强大的BPMN 2.0渲染工具包和Web建模器,通过与Electron结合,我们可以将其转化为强大的跨平台桌面应用。本教程将详细介绍如何实现这一整合,让你快速掌握桌面端流程建模应用的开发方法。## 准备工作:环境搭建与依赖安装在开始之前,确保你的开发环境中已安装Node.js和npm。首先,克隆bpmn-js仓库:```bashgit clone https:
如何将bpmn-js与Electron结合:打造跨平台桌面端流程建模应用完整教程
bpmn-js是一个功能强大的BPMN 2.0渲染工具包和Web建模器,通过与Electron结合,我们可以将其转化为强大的跨平台桌面应用。本教程将详细介绍如何实现这一整合,让你快速掌握桌面端流程建模应用的开发方法。
准备工作:环境搭建与依赖安装
在开始之前,确保你的开发环境中已安装Node.js和npm。首先,克隆bpmn-js仓库:
git clone https://gitcode.com/gh_mirrors/bp/bpmn-js
cd bpmn-js
接下来,安装项目基础依赖:
npm install
由于bpmn-js本身不包含Electron依赖,我们需要手动添加Electron相关包:
npm install electron electron-builder --save-dev
项目配置:创建Electron主进程文件
在项目根目录下创建Electron主进程文件main.js:
const { app, BrowserWindow } = require('electron');
const path = require('path');
function createWindow() {
const mainWindow = new BrowserWindow({
width: 1200,
height: 800,
webPreferences: {
nodeIntegration: true,
contextIsolation: false
}
});
// 加载bpmn-js的演示页面
mainWindow.loadFile(path.join(__dirname, 'examples/simple.html'));
// 打开开发者工具
mainWindow.webContents.openDevTools();
}
app.whenReady().then(() => {
createWindow();
app.on('activate', function () {
if (BrowserWindow.getAllWindows().length === 0) createWindow();
});
});
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') app.quit();
});
集成bpmn-js到Electron应用
创建一个简单的HTML页面examples/simple.html,集成bpmn-js:
<!DOCTYPE html>
<html>
<head>
<title>Electron + bpmn-js 流程建模工具</title>
<link rel="stylesheet" href="../assets/bpmn-js.css">
<style>
body {
height: 100vh;
margin: 0;
display: flex;
flex-direction: column;
}
#canvas {
flex: 1;
border: 1px solid #ccc;
}
</style>
</head>
<body>
<div id="canvas"></div>
<script src="../dist/bpmn-modeler.development.js"></script>
<script>
// 初始化bpmn-js模型器
const modeler = new BpmnJS({
container: '#canvas',
keyboard: { bindTo: document }
});
// 加载示例BPMN文件
modeler.importXML(`
<?xml version="1.0" encoding="UTF-8"?>
<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL http://www.omg.org/spec/BPMN/2.0/20100501/BPMN20.xsd"
id="sample-diagram">
<bpmn2:process id="Process_1" isExecutable="false">
<bpmn2:startEvent id="StartEvent_1"/>
</bpmn2:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1">
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds height="36.0" width="36.0" x="173.0" y="102.0"/>
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn2:definitions>
`).then(function() {
console.log('BPMN diagram imported');
}).catch(function(err) {
console.error('Error importing BPMN diagram', err);
});
</script>
</body>
</html>
配置package.json文件
修改package.json文件,添加Electron启动脚本和打包配置:
{
"scripts": {
"start": "electron .",
"package": "electron-builder"
},
"build": {
"appId": "com.example.bpmn-js-electron",
"productName": "BPMN Modeler",
"directories": {
"output": "dist-electron"
},
"win": {
"target": "nsis"
},
"mac": {
"target": "dmg"
},
"linux": {
"target": "deb"
}
}
}
运行与测试应用
现在你可以启动应用进行测试:
npm start
你将看到一个Electron窗口,其中包含bpmn-js的建模界面。你可以从左侧工具栏拖放元素,创建自己的BPMN流程 diagram。
打包应用
当应用开发完成后,可以使用以下命令打包为桌面应用:
npm run package
打包完成后,你将在dist-electron目录下找到针对不同操作系统的安装文件。
高级功能:文件操作与持久化
为了使应用更加实用,我们可以添加文件保存和打开功能。修改main.js,添加文件对话框支持:
const { dialog } = require('electron');
const fs = require('fs');
// 在createWindow函数中添加菜单
const { Menu } = require('electron');
const template = [
{
label: '文件',
submenu: [
{
label: '打开',
click: async () => {
const { filePaths } = await dialog.showOpenDialog({
filters: [{ name: 'BPMN Files', extensions: ['bpmn'] }]
});
if (filePaths.length > 0) {
const content = fs.readFileSync(filePaths[0], 'utf8');
mainWindow.webContents.send('load-bpmn', content);
}
}
},
{
label: '保存',
click: async () => {
const content = await mainWindow.webContents.executeJavaScript('modeler.getXML()');
const { filePath } = await dialog.showSaveDialog({
filters: [{ name: 'BPMN Files', extensions: ['bpmn'] }]
});
if (filePath) {
fs.writeFileSync(filePath, content.xml);
}
}
}
]
}
];
const menu = Menu.buildFromTemplate(template);
Menu.setApplicationMenu(menu);
在前端页面中添加相应的事件监听:
// 在simple.html的script标签中添加
ipcRenderer.on('load-bpmn', (event, content) => {
modeler.importXML(content);
});
总结与扩展
通过本教程,你已经学会了如何将bpmn-js与Electron结合,创建跨平台的桌面端流程建模应用。这个基础应用可以进一步扩展,添加更多功能,如:
- 集成属性面板,允许编辑元素属性
- 添加撤销/重做功能
- 实现协作编辑功能
- 导出为图片或PDF格式
bpmn-js提供了丰富的API,你可以通过查阅官方文档docs/project/SETUP.md了解更多高级用法。现在,你可以开始构建自己的BPMN建模桌面应用了!
更多推荐

所有评论(0)