bpmn-js起步

2023-11-11

通过本文逐步熟悉bpmn-js。

 

快速介绍:

bpmn.js是一个BPMN2.0渲染工具包和web建模器。使用JavaScript编写,在不需要后端服务器支持的前提下向现代浏览器内嵌入BPMN2.0流程图。这使得它很容易的嵌入到任何web应用中。

 

这个库既可以是web查看器也可以是web建模器。使用查看器将BPMN2.0流程图嵌入到你的应用中并可以使用数据丰富你的流程图。使用建模器在你的应用内部创建BPMN2.0流程图。

 

下文将向您介绍如何使用该库,并深入了解其内部结构。也就是说,这两个组件促成了该库的高度模块化和可扩展的结构。

 

本文包含以下内容:

 

● 如何使用库

   • 嵌入查看器(预打包)

   • 自己制作模型(通过npm)

● 理解bpmn-js内部

   • 流程图交互/建模(流程图-js)

   • BPMN元模型(bpmn-moddle)

   • 将事物整合在一起(bpmn-js)

● 进一步探索

 

如何使用库

 

有两种方法在你的应用中使用bpmn.js。库的预打包版本可以让你在任何网站中快速添加BPMN。npm版本的设置更加复杂,但允许您访问单个库组件,并更容易扩展。

本节将概述这两种方法。首先我们来介绍如何向网站中嵌入一个预打包的BPMN查看器。之后,展示如何通过npm创建一个BPMN建模器。

 

嵌入预打包查看器

通过一个简单的script标签引入就可以将预打包的BPMN查看器嵌入你的网站

<!-- BPMN 流程图容器 --> 
<div id="canvas"></div> 
<!-- 使用 CDN 路径 或者本地 bpmn-js 路径 --> 
<script src="https://unpkg.com/bpmn-js@0.27.0-1/dist/bpmn-viewer.development.js"></script>

 

通过引入的BPMNjs变量,可以使BPMN查看器可用。我们可以通过下面这段js来引入一个BPMN流程图。

<script>

// 你即将要展示的流程图

var bpmnXML;


// BpmnJS是BPMN查看器实例

var viewer = new BpmnJS({ container: '#canvas' });


// 导入BPMN 2.0流程图

viewer.importXML(bpmnXML, function(err) {

if (err) {

//导入失败 !

} else {

// 导入成功!


var canvas = viewer.get('canvas');

canvas.zoom('fit-viewport');

}

});

</script>

该代码片段使用Viewer#importXML API显示预加载的BPMN 2.0图。导入图是异步的,一旦完成,查看器将通过回调通知我们结果。

导入后,我们可以通过Viewer#get访问各种图表服务。在上面的代码片段中,我们与画布交互以使图适合当前可用的视图大小。

通常,通过AJAX动态加载BPMN 2.0图更实用。这可以使用纯JavaScript(如下所示)或通过实用程序库(如jQuery)实现,后者提供了更方便的api。

<script>

var xhr = new XMLHttpRequest();


xhr.onreadystatechange = function() {

if (xhr.readyState === 4) {

viewer.importXML(xhr.response, function(err) {

// ...

});

}

};


xhr.open('GET', 'path-to-diagram.bpmn', true);

xhr.send(null);

</script>

查看预打包的示例以及我们的初学者示例,了解更多信息。

 

创建属于自己的建模器

 

如果你想要围绕库做一些定制化,需要使用npm来使用库。这种方法有很多优点,比如可以访问单个库组件。它还使我们能够更好地控制部分打包查看器/建模器。需要使用Webpack (>=2) or Rollup来打包bpmn-js和我们的应用。

以下大致遵循modeler示例,使用该库创建BPMN建模器。

 

引入库

 

首先,通过npm安装bpmn.js

npm install bpmn-js

然后,通过ES import获得BPMN建模器

import Modeler from 'bpmn-js/lib/Modeler';

// 创建一个建模器

var modeler = new Modeler({ container: '#canvas' });

 

// 导入流程图

modeler.importXML(bpmnXML, function(err) {

// ...

});

同样的,需要在你的html中提供一个id声明的画布元素,以便建模器能够向画布内渲染。

 

添加样式

 

当将建模器嵌入网页时,要引入diagram-js样式以及BPMN图标字体。它们都随bpms -js发行版一起在dist/assets文件夹下提供。

<link rel="stylesheet" href="bpmn-js/dist/assets/diagram-js.css" />

<link rel="stylesheet" href="bpmn-js/dist/assets/bpmn-font/css/bpmn-.css" />

添加样式表可以确保图元素获得适当的样式化,背景板以及画板显示BPMN图标

 

浏览器打包

 

bpmn.js及其依赖由ES模块分发。使用ES模块打包器Webpack (>=2) 或者 Rollup来打包bpmn.js和你的应用。可以通过打包例子来学习更多相关。

 

与生命周期事件挂钩

 

事件允许您钩入建模器的生命周期以及图交互。下面的代码片段展示了一般情况下如何捕获元素的更改和建模操作。

modeler.on('commandStack.changed', function() {

// 建模或执行撤销/重做操作

});


modeler.on('element.changed', function(event) {

var element = event.element;


// 元素改变触发

})

 

使用Viewer#on注册事件或者扩展模块中的事件总线。使用 Viewer#off 来停止监听事件。请查看交互示例,以查看监听动作中的事件。

 

建模器的扩展

 

在实际使用的过程中,你可以用additionalModules选项来扩展查看器和建模器。允许您使用自定义模块来修改或替换现有的功能。

 

import OriginModule from 'diagram-js-origin';


 

// 创建一个建模器

var modeler = new Modeler({

container: '#canvas',

additionalModules: [

OriginModule,

require('./custom-rules'),

require('./custom-context-pad')

]

});

一个模块(比较:模块系统部分)是一个单元,定义了一个或多个服务。这些服务配置了bpmn.js或者提供了额外的功能。也就是通过接入流程图的生命周期来实现的。

 

一些模块,例如: diagram-js-origin 或 diagram-js-minimap提供了通用的用户界面添加。内置的bpmn-js模块,例如:such as bpmn rules 或 modeling提供了高定制的BPMN功能。

 

常用扩展BPMN建模器的方法是添加“自定义建模规则”。这样,您可以限制或扩展用户的建模操作。

 

扩展的其他例子有:

 

● 添加自定义元素

● 自定义面板/内容面板

● 自定义形状的渲染

 

查看bpms -js-example项目,了解更多工具包扩展展示案例。

 

构建自定义发行版

如果你想要针对你自定义的建模器和查看器创建预打包版本,请参 custom-bundle example这个例子。如果你定制了大量的功能但是希望以简单的方式交付给用户的话,这可能会给到你帮助。

 

理解bpmn-js内部

本节探讨一些bpmn-js的内部结构。

如下面的架构图所示,bpmn-js构建在两个重要的库之上:diagram-js和bpmn-moddle。

 

 

我们使用diagram-js 来绘制形状和连接。它为我们提供了与这些图形元素交互的方法,同时也提供了额外的工具例如overlays来帮助用户构建更为强大的查看器。对于更高级的建模情况,提供了提供了背景板、调色板和重做/撤消等功能。

bpmn-moddle清楚BPMN2.0元模型,元模型定义在BPMN2.0规范之上。它允许我们读写BPMN 2.0模式兼容的XML文档,获得关于图形和连接的相关信息并绘制出来。

在这两个库之上,bpmn.js定义了BPMN的细节,比如外观、建模规则和工具(如调色板)。我们将在下面的段落中详细介绍各个组件。

 

图交互/建模(diagram-js)

diagram-js是一个工具箱,用于在web上显示和修改图表。它允许我们渲染视觉元素并在它们之上构建交互体验。它为我们提供了一个非常简单的模块系统,用于构建特殊的服务和服务的依赖注入。这个系统还提供了一些核心服务,这些服务实现了图的基本内容。

此外,diagram-js为图形元素及其关系定义了一个数据模型。

 

模块系统

再下一层,diagram-js使用依赖注入(DI)来连接和发现图组件。这个机制是建立在node-di之上的。

在diagram-js上下文中讨论模块时,我们指的是提供命名服务及其实现的单元。从这个意义上说,服务是一个函数或实例,它可以使用其他服务在图的上下文中执行某些操作。

 

下面显示了一个与生命周期事件挂钩的服务。它通过eventBus注册一个事件来实现,eventBus是另一个著名的服务:

function MyLoggingPlugin(eventBus) {

eventBus.on('element.changed', function(event) {

console.log('element ', event.element, ' changed');

});

}

 

// 确保依赖项名称在缩小后仍然可用

MyLoggingPlugin.$inject = [ 'eventBus' ];

 

我们必须使用模块定义唯一名称发布服务:

import CoreModule from 'diagram-js/lib/core';

// 作为一个模块导入

export default {

__depends__: [ CoreModule ], // {2}

__init__: [ 'myLoggingPlugin' ], // {3}

myLoggingPlugin: [ 'type', MyLoggingPlugin ] // {1}

};

 

该定义告诉DI基础设施,该服务名为myLoggingPlugin {1},它依赖于diagram-js核心模块{2} 并且服务应该在创建关系图{3}时初始化。要了解更多细节,请查看node-di的文档。

 

我们现在可以通过我们的自定义模块引导diagram-js

要将模块插入bpmn-js,可以使用additionalModules选项,如扩展Modeler部分所示。

 

核心服务

bpmn-js核心是围绕一些基本服务构建的:

 

● Canvas -提供了添加和删除图形元素的api;处理元素生命周期,并提供用于缩放和滚动的api。

● EventBus -该库的全局通信通道具有防火和遗忘策略。可以订阅各种事件,并在事件发出后立即采取行动。事件总线帮助我们解耦关注点并模块化功能,以便新特性能够轻松地与现有行为挂钩。

● ElementFactory -根据bpmn-js的内部数据模型创建形状和连接的工厂。

● ElementRegistry—知道添加到图中的所有元素,并提供api来根据id检索元素及其图形表示。

● GraphicsFactory -负责创建图形和连接的图形表示。实际的外观是由渲染器定义的,即绘制模块中的DefaultRenderer。

 

数据模型

实际上,diagram-js实现了一个由形状和连接组成的简单数据模型。

 

数据模型要点:形状和连接

一个形状有父节点、子节点列表以及传入和传出连接列表。

一个连接有父节点、源节点和目标节点,指向一个形状。

ElementRegistry负责根据该模型创建形状和连接。

在建模过程中,建模服务将根据用户操作更新元素关系。

 

辅助服务(即工具箱)

除了数据模型及其核心服务之外,diagram-js还提供了丰富的辅助工具工具箱。

CommandStack-负责建模过程中的重做和撤销。

ContextPad-提供一个元素的上下文操作。

Overlays——提供api来附加额外的信息到图元素。

Modeling——提供用于更新画布上的元素(移动、删除)的api

Palette

让我们继续讨论幕后发生的BPMN魔法。

 

BPMN元模型(bpmn-moddle)

bpmn-moddle封装了BPMN 2.0元模型,为我们提供了读写BPMN 2.0 XML文档的工具。在导入时,它将XML文档解析为JavaScript对象树。在建模过程中对该树进行编辑和验证,然后在用户希望保存图时将其导出回BPMN 2.0 XML。因为bpmn-moddle封装了有关BPMN的知识,我们能够在导入和建模期间进行验证。根据结果,我们可以约束某些建模操作,并向用户输出有用的错误消息和警告。

就像bpmn-js一样,bpmn-moddle的基础也是建立在两个库之上的:

● moddle提供了一种用JavaScript定义元模型的简洁方法

● 基于moddle读写XML文档的model-xml

 

从本质上讲,bpmn-moddle将BPMN规范作为元模型添加进来,并为BPMN模式验证提供了一个简单的接口。从库的角度来看,它提供了以下API:

fromXML -从给定的XML字符串创建BPMN树

toXML - 向BPMN 2.0 XML编写BPMN对象树

 

BPMN元模型对于bpmn -js是必不可少的,因为它允许我们验证我们使用的BPMN 2.0文档,提供正确的建模规则,并导出所有遵循BPMN模型的人都能理解的有效BPMN文档。

 

把东西连接起来(bpmn-js)

 

我们学过bpms -js是建立在diagram-js和bpms -moddle之上的。它将两者联系在一起,并添加BPMN外观。这包括BPMN调色板、BPMN背景板以及BPMN 2.0特定规则。在本节中,我们将解释它在建模的不同阶段是如何工作的。

当我们导入BPMN 2.0文档时,bpmn-moddle会将其从XML解析为对象树。bpmn-js呈现该树的所有可见元素,即在画布上创建各自的形状和连接。因此,它将BPMN元素和图形元素联系在一起。这将产生一个结构,如下所示,用于初始事件形状。

{

id: 'StartEvent_1',

x: 100,

y: 100,

width: 50,

height: 50,

businessObject: {

$attrs: Object

$parent: {

$attrs: Object

$parent: ModdleElement

$type: 'bpmn:Process'

flowElements: Array[1]

id: 'Process_1'

isExecutable: false

}

$type: 'bpmn:StartEvent'

id: 'StartEvent_1'

}

}

 

您可以通过businessObject属性从每个图形元素访问底层BPMN类型。

 

由于BpmnRenderer,bpmn -js也知道每个BPMN元素的样子。通过插入渲染周期,您还可以定义单个BPMN元素的自定义表示。

 

一旦导入完成,我们就可以开始建模了。我们使用规则来允许或不允许某些建模操作。这些规则由BpmnRules定义。我们将这些规则基于OMG定义的BPMN 2.0标准。然而,正如前面提到的,其他人也可能与规则评估挂钩,以贡献不同的行为。

 

建模模块捆绑了BPMN 2.0相关的建模功能。它添加了BPMN 2.0特定的建模行为,并负责在用户执行的每个建模操作中更新BPMN 2.0文档树(cf. BpmnUpdater)。请查看它,以更深入地了解规则、行为和BPMN更新周期。

 

当纯粹从库的角度来看bpmn-js时,值得一提的是它可以有三种形式:

 

Viewer展示图

NavigatedViewer显示和导航BPMN图

Modeler 建模BPMN图

 

版本之间的唯一区别是它们捆绑了不同的功能集。NavigatedViewer添加了用于导航画布的模块,Modeler添加了大量用于创建、编辑和与画布上的元素交互的功能。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

bpmn-js起步 的相关文章

  • 在 Google Cloud 中设置网站? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我完全迷失在这之中 我习惯于使用带有 cpanel 的简单 Web 主机来制作网站 只需使用 filezilla 登录并上传我的 ht
  • 如何解决PHP扩展“0”必须加载的问题?

    我正在尝试在我的服务器上安装 Magento 我做了一切 正如文档中所写的 我有以下错误 必须加载 PHP 扩展 0 当我尝试在浏览器中的第二页上配置 Magento 时 会发生这种情况 你知道如何解决这个问题吗 如果您安装的是 Magen
  • REST API 与 Web API

    我是构建 HTTP API 的初学者 我似乎对 REST API 和 Web API 之间的区别感到困惑 我在网上读到更多相关内容 困惑似乎越来越多 我猜菲尔丁有与此链接相同的问题http roy gbiv com untangled 20
  • IIS 7.5:对网站的初始请求永远不会加载

    当我第一次浏览我的网站时 互联网不断旋转 加载 如果我两秒钟后尝试再次加载它 一切都会正常 就好像它 睡着了 一样 我想这一定和 回收 有关 我已将 空闲超时 设置为 0 将回收 定期时间间隔 设置为 0 在浏览我的网站之前 我查看了 工作
  • 清除 Laravel 队列缓存而不重新启动

    在我的应用程序中 每个客户都有一种复杂的类 我们在其中为该特定客户进行一些搜索和替换 我运行队列工作人员每天与 eBay 同步 以便每个客户进行某种搜索和替换 问题是 Laravel 队列会缓存代码很长一段时间 如果我想去更改任何客户类文件
  • 尝试访问我的网站时出现内部服务器错误

    我收到这个错误 内部服务器错误 服务器遇到内部错误或配置错误 无法完成您的请求 请联系服务器管理员 电子邮件受保护 cdn cgi l email protection和 告知他们错误发生的时间以及您可能会发生的任何事情 所做的事情可能导致
  • 使用 REST API 进行正确的会话管理

    我已经完成了 RESTful API 的设计 其中我使用作为参数发送的 API 令牌对每个请求进行身份验证 现在我想创建一个客户端界面 我想知道什么是管理每个客户端的会话的正确安全方法browser客户 我想过一个流程来保持服务器端无状态
  • 从 Unity WebGL 调用 Angular2 函数

    目前 我正在使用 Angular2 版本 2 1 2 和 Unity 可视化工具 使用 Unity 5 5 构建 我需要做的是从 Unity 到 Angular2 进行通信 我正在使用类似于下面的代码 public void GetBill
  • 在 html 中创建子页面 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 假设我有一个网站http www example com http www example com 如何为此页面创建更多子页面 即 w
  • HTML if 语句在 CDN 失败时加载本地 JS/CSS

    当从 CDN 或任何外部服务器加载 CSS JS 文件时 有可能 即使概率很低 由于外部故障而丢失该文件 在这种情况下 html 页面将因缺乏适当的 CSS 和 JS 而被损坏 有没有一种实用的方法可以在 CDN 故障时加载本地版本 IF
  • 如何在odoo中重写js函数

    我想加载 shop checkout url 函数是 odoo define change info order website sale change info order function require use strict oe w
  • Django - 缺少 1 个必需的位置参数:'request'

    我收到错误 get indiceComercioVarejista 缺少 1 个必需的位置参数 要求 当尝试访问 get indiceComercioVarejista 方法时 我不知道这是怎么回事 views from django ht
  • 为什么要使用除 div 以外的任何东西? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • php 中的 stackoverflow 上有这样的成就系统吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 从概念上讲 如何使用 PHP 和 MySQL 为网站编写一个成就系统 唯一真正的方法是不断执行 MySQL 查询来测试成绩等吗 您有两
  • 在 Blogger 中使用相对链接

    我正在使用博主 当我需要在我的博客文章中提到一个链接并且该链接实际上是我自己的博客文章的链接时 我在其旁边提到标签 www my blog name blogspot in 12 2013 how to do html if i chang
  • 如何防止桌面浏览器(Chrome、Safari)缩放网页

    我尝试使用以下元视图端口标记来防止浏览器缩放 但这不起作用 我知道这是可能的 因为我的缩放在此网站上被阻止 未来主义 xyz http futurism xyz 该网站的视口标签是这样的
  • 尝试使用 php 发送 POST 请求,无论我做什么,我都会收到“HTTP ERROR 500”

    为了发出 HTTP 请求 有人建议我尝试使用 PHP 并给了我一段代码 url https example com dashboard api data array to gt PHONE NUMBER from gt SENDER ID
  • 您可以在不是在 Google 协作平台下创建的网站上使用 Google 脚本吗? [复制]

    这个问题在这里已经有答案了 Google 脚本有一种方法可以嵌入到 Google 网站中 但我想知道是否可以在非 Google 托管的网站上使用 Google 脚本 此 google 脚本的目的是作为 Javascript 的简单替代方案
  • 找不到模块:错误:包路径。未从包中导出

    import firebase from firebase const firebaseConfig apiKey AIzaSyBOK7x5N5UnjY4TDqndzH7l5tvdNIsWFRc authDomain todo app e3
  • Azure Web 角色中的网站项目

    我正在研究一个新的 ASP Net 项目 我们希望将其托管在 Windows Azure Web 角色中 该项目的技术要求之一是利用 ASP Net 的完整预编译选项 不可更新 单页程序集 Web Site项目模型 与 ASP Net 相反

随机推荐

  • CSS设计指南(第3版)》

    CSS设计指南 第3版 基本信息 原书名 Stylin with CSS a designer s guide 作者 英 Charles Wyke Smith 译者 李松峰 丛书名 图灵程序设计丛书 出版社 人民邮电出版社 ISBN 978
  • ATL与COM之间的关系、ATL的特点与基本使用方法

    ATL Active Template Library活动模板库 是一种微软程序库 支持利用C 语言编写ASP代码以及其它ActiveX程序 通过活动模板库 可以建立COM组件 然后通过ASP页面中的脚本对COM对象进行调用 这种COM组件
  • [R语言]R包的安装&帮助获取

    本文主要参考 Paul Teetor R语言经典实例 一书 在R语言中 包含的包中有各种应用函数 1 install packages packagename 安装R包 library package name 载入包 对于base包可省略
  • CentOS7安装oracle19c

    教程 https zhuanlan zhihu com p 571737575 CentOS7安装oracle19c教程 https zhuanlan zhihu com p 571737575 一 准备工作 1创建 oracle 用户 以
  • 关于指针

    指针的一些基础知识 1 指针的定义 数据在内存中的地址也称为指针 如果一个变量存储了一份数据的指针 我们就称它为指针变量 在C语言中 允许用一个变量来存放指针 这种变量称为指针变量 指针变量的值就是某份数据的地址 这样的一份数据可以是数组
  • 利用docker部署TF深度学习模型(附件文件较大,并无上传。部署参考步骤即可)

    一 介绍 docker Docker 是一个开源的应用容器引擎 基于 Go 语言 并遵从 Apache2 0 协议开源 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级 可移植的容器中 然后发布到任何流行的 Linux 机器上
  • 预编译过程中的相关知识点

    1 文件包含顺序 在头文件中 1 包含自定义头文件 2 包含第三方库的头文件 3 包含标准库头文件 在源文件中 1 包含该源文件对应的头文件 2 包含自定义头文件 3 包含第三方库的头文件 4 包含标准库头文件
  • 【Python】pip安装opencv-python包失败与换清华源提速

    文章目录 出现的问题 解决的方法 换源 出现的问题 在Windows10系统中 在cmd中 或者在pycharm的Terminal中 输入pip install opencv python会出现如下报错 ERROR Exception Tr
  • Python:ImportError: DLL load failed:找不到指定的模块 解决方案

    解决方法 检查numpy scipy matplotlib scikit learn的版本是否更新到最新且符合当前Python版本 如果出现不是最新的版本 先卸载该版本 windows pip uninstall numpy 再去http
  • 2019下半年阿里面试失败总结

    结果预览 2年半第一次出去面试 也是第一次面试阿里 打击不小 收货也不少 最终倒在二面笔试题上 虽有不甘 但仍需收拾心情 继续努力 一面总结 在一面上 跟网上大多数的反馈相同 都是比较Java基础项 然后往深度问 我整理了下 因为我简历上写
  • springmvc <mvc:annotation-driven/><mvc:default-servlet-handler/>区别 ssm整合

    文章目录 概述 概念和核心 什么是MVC springmvc第一个程序搭建 先到依赖 idea搭建项目 eclipse搭建 在spirngmvc xml配置文件写上这个 web xml写上servlet配置 匹配优先级 流程和原理 执行流程
  • 一文解读flowable工作流

    flowable工作流的定义 流程 及项目使用 flowable工作流 1 flowable 1 1 定义 1 2 作用 1 3 流程 2 使用实例 2 1 引入pom依赖 2 2 yml文件 2 3 审批流程xml 2 4 引擎配置类 2
  • 【模板】二分

    文章目录 1 整数二分 1 1 寻找 x 或 x 的后继 1 2 寻找 x 或 x 的前驱 1 3 模板 1 4 解题步骤 2 实数二分 本文的二分模板来自 算法竞赛进阶指南 1 整数二分 对于整数域上的二分 需要注意终止边界 左右区间取舍
  • windows消息机制详解

    前言 windows是一个消息驱动的系统 windows的消息提供了应用程序之间 应用程序与windows 系统之间进行通信的手段 要想深入理解windows 消息机制的知识是必不可少的 基础 进程接收来自于鼠标 键盘等其他消息都是通过消息
  • [C/C++]函数的栈空间(避免栈空间溢出)

    个人主页 北 海 CSDN新晋作者 欢迎 点赞 评论 收藏 收录专栏 C C 希望作者的文章能对你有所帮助 有不足的地方请在评论区留言指正 大家一起学习交流 错误1 当数组的内存占用较大时 会引发异常 include
  • 手把手使用Micropython+合宙Esp32c3(驱动安装,为合宙Esp32c3安装Micropython固件库,代码上传到ESP32C3中)含Thonny和vscode两种方法

    文章目录 驱动安装 为合宙Esp32c3安装Micropython固件库 1 Micropython简介 2 Micropython解释器下载 Thonny解释器 VScode 3 ESP32C3固件库下载以及安装 固件库下载 固件库安装
  • dorado 产品简介

    dorado展现中间件是快速创建Rich Internet Application的表现层解决方案 dorado包含运行平台与开发工具 dorado可以广泛应用于各行业管理类web软件项目或产品中 dorado提高了Web应用的可用性 降低
  • 同步和异步的区别、例子

    一 同步 异步的区别 同步 是所有的操作都做完 才返回给用户结果 即写完数据库之后 在相应用户 用户体验不好 异步 不用等所有操作等做完 就相应用户请求 即先相应用户请求 然后慢慢去写数据库 用户体验较好 同步 同步的思想是 所有的操作都做
  • 《NoSQL精粹》摘要0-前言

    这个就是首页的摘要了 哈哈 当然 酱油不是这么打的 这样是要被鞭尸的 以下就是读 NoSQL精粹 的前言的摘要 当然咯 不是照抄照搬 所以有出入之处 还请指出 见谅 稳定性在数据存储领域一直颇受重视 因为企业的数据比程序存储的时间要长很多
  • bpmn-js起步

    通过本文逐步熟悉bpmn js 快速介绍 bpmn js是一个BPMN2 0渲染工具包和web建模器 使用JavaScript编写 在不需要后端服务器支持的前提下向现代浏览器内嵌入BPMN2 0流程图 这使得它很容易的嵌入到任何web应用中