2021-07-12-nodeRed 源码分析8- runtime nodes模块分析
功能概述#
提供运行时与节点相关的接口,如节点注册、流程增删改查、节点模块处理、上下文等。
所依赖的三方库#
- when
- path
- fs
- clone
- util
文件域变量#
- @node-red/registry
- 为runtime提供节点注册、响应、发现及管理功能
- credentials
- 封装credentials相关操作
- context
- 提供上下文环境,可定义变量、保存等
- Node
- 为所有新建立的节点提供初始化
API#
Function | Description |
---|---|
// Lifecycle | —- |
init | 初始化函数,调用涉及的几个模块的init方法 |
load | 加载依赖模块 |
// Node registry | —- |
createNode | 调用Node模块创建一个节点,并配置credentials |
getNode | 调用flow模块获取节点 |
eachNode | 调用flow模块遍历所有节点,可传入回调函数 |
getContext | 调用context模块获取上下文 |
installModule | 安装一个模块 |
uninstallModule | 删除一个模块 |
enableNode | 启用一个模块 |
disableNode | 禁用一个模块 |
// Node type registry | —- |
registerType | 调用registry模块注册节点 |
getType | 调用registry模块获取节点类型 |
getNodeInfo | 调用registry模块获取节点信息 |
getNodeList | 调用registry模块获得已安装的node modules |
getModuleInfo | 调用registry模块获得node module信息 |
getNodeConfigs | 调用registry模块获取所有节点的html内容 |
getNodeConfig | 调用registry模块获取某个node的html内容 |
getNodeIconPath | 调用registry模块获取某个node的图标 |
getNodeIcons | 调用registry模块获取所有节点的图标 |
getNodeExampleFlows | 调用registry模块获取示例流程 |
getNodeExampleFlowPath | 调用registry模块获取示例流程目录 |
clearRegistry | 调用registry模块清除registry模块内容 |
cleanModuleList | 调用registry模块清除模块列表 |
// Flow handling | —- |
loadFlows | 调用flow模块完成流程加载 |
startFlows | 调用flow模块完成流程启动 |
stopFlows | 调用flow模块完成流程结束 |
setFlows | 调用flow模块完成全部流程的设置 |
getFlows | 调用flow模块返回所有流程 |
addFlow | 调用flow模块返回增加流程 |
getFlow | 调用flow模块返回获取流程 |
updateFlow | 调用flow模块更新获取流程 |
removeFlow | 调用flow模块更新删除流程 |
// Credentials | —- |
addCredentials | 调用credentials模块增加凭证 |
getCredentials | 调用credentials模块获取凭证 |
deleteCredentials | 调用credentials模块删除凭证 |
getCredentialDefinition | 调用credentials模块获取凭证定义 |
setCredentialSecret | 调用credentials模块设置凭证密码 |
clearCredentials | 调用credentials模块清除凭证 |
exportCredentials | 调用credentials模块导出凭证 |
getCredentialKeyType | 调用credentials模块获取凭证类型 |
// Contexts | —- |
loadContextsPlugin | 调用context模块加载上下文保存插件 |
closeContextsPlugin | 调用context模块关闭上下文保存插件 |
listContextStores | 调用context模块罗列上下文保存插件 |
涉及文件#
- packages\node_modules@node-red\runtime\lib\nodes\index.js
代码分析#
参与流程#
sequenceDiagram autonumber title: 初始化 other ->> index.js@nodes@lib@runtime : init(); index.js@nodes@lib@runtime ->> credentials.js@nodes@lib@runtime: init() index.js@nodes@lib@runtime ->> index.js@flows@lib@runtime: init() index.js@nodes@lib@runtime ->> index.js@lib@registry: init() index.js@nodes@lib@runtime ->> context.js@nodes@lib@runtime: init()
sequenceDiagram autonumber title: start, 加载流、节点等 other ->>index.js@nodes@lib@runtime: load() index.js@nodes@lib@runtime ->>index.js@lib@registry: load() other ->>index.js@nodes@lib@runtime: registerType() index.js@nodes@lib@runtime ->>index.js@lib@registry: registerType() index.js@lib@registry ->>registry.js@lib@registry: registerNodeConstructor() other ->>index.js@nodes@lib@runtime: loadFlows() index.js@nodes@lib@runtime ->>index.js@flows@lib@runtime: load() other ->>index.js@nodes@lib@runtime: startFlows() index.js@nodes@lib@runtime ->>index.js@flows@lib@runtime: startFlows() other ->>index.js@nodes@lib@runtime: createNode() index.js@nodes@lib@runtime ->>Node.js@nodes@lib@runtime: Node()
sequenceDiagram autonumber title: 安装/卸载模块 other ->>index.js@nodes@lib@runtime : installModule(); index.js@nodes@lib@runtime ->>index.js@lib@registry : installModule(); other ->>index.js@nodes@lib@runtime : uninstallModule(); index.js@nodes@lib@runtime ->>index.js@lib@registry : uninstallModule();
sequenceDiagram autonumber title: 禁用/使用节点 other ->>index.js@nodes@lib@runtime : enableNode(); index.js@nodes@lib@runtime ->>index.js@lib@registry : enableNode(); index.js@lib@registry -->>index.js@nodes@lib@runtime : reportNodeStateChange(); other ->>index.js@nodes@lib@runtime : disableNode(); index.js@nodes@lib@runtime ->>index.js@lib@registry : disableNode(); index.js@lib@registry -->>index.js@nodes@lib@runtime : reportNodeStateChange();
例子#
- 使用html参数创建节点
1
2
3
4function MQTTBrokerNode(n) {
RED.nodes.createNode(this,n);
} - 使用html参数创建节点
1
2
3
4
5function MQTTBrokerNode(n) {
this.brokerConn = RED.nodes.getNode(this.broker);//根据ID从已注册的节点中找
}
2021-07-12-nodeRed 源码分析8- runtime nodes模块分析
https://blog.buqia.fun/2022/02/17/2021-07-12-nodeRed-源码分析8-runtime-nodes模块分析/