子流程可以打包为 npm 模块并像其他节点一样分发。
安装后,它们将作为常规节点出现在调色板中。用户无法查看或修改子流程内部的流程。
在这个阶段,创建子流程模块是一个手动过程,需要手动编辑子流程 JSON。我们将来会提供工具来帮助自动化这一过程——但目前,这些说明应该能帮助您入门。
任何子流程都可以打包为模块。在您这么做之前,您需要考虑它将如何使用。以下清单是一个有用的提醒,帮助您考虑各个方面:
子流程可以持有额外的元数据,这些数据可以用来定义将要打包的模块。
在 子流程模块属性编辑对话框 中,您可以设置以下属性:
Module
- npm 包名Node Type
- 默认为子流程的 id
属性。提供一个更好的类型值是有帮助的。与常规节点类型一样,必须是唯一的,以避免与其他节点发生冲突。Version
Description
License
Author
Keywords
这是 Node-RED 外部的手动工作。
创建一个您想要给模块命名的目录。在这个示例中,我们将使用 node-red-example-subflow
。
mkdir node-red-example-subflow cd node-red-example-subflow
使用 npm init
创建一个 package.json
文件:
npm init
它会询问一系列问题——提供与您添加到子流程元数据中的值匹配的答案。
添加一个 README.md
文件——所有好的模块都必须有一个 README。
为您的模块创建一个 JavaScript 包装器。在这个示例中,我们将使用 example.js
:
const fs = require("fs");
const path = require("path");
module.exports = function(RED) {
const subflowFile = path.join(__dirname,"subflow.json");
const subflowContents = fs.readFileSync(subflowFile);
const subflowJSON = JSON.parse(subflowContents);
RED.nodes.registerSubflow(subflowJSON);
}
这段代码读取名为 subflow.json
的文件内容——我们稍后会创建这个文件——解析它,然后将其传递给 RED.nodes.registerSubflow
函数。
在所有这些就位之后,您现在可以将子流程添加到模块中。这需要对子流程 JSON 进行仔细编辑。
Ctrl-E
或 菜单->导出
),并将 JSON 粘贴到文本编辑器中。选择导出对话框 JSON 选项卡上的“格式化”选项将使接下来的步骤更容易。JSON 结构为节点对象的数组。倒数第二个条目是子流程定义,最后一个条目是您添加到工作区的子流程实例。
[
{ "id": "Node 1", ... },
{ "id": "Node 2", ... },
...
{ "id": "Node n", ... },
{ "id": "子流程定义节点", ... },
{ "id": "子流程实例节点", ... }
]
[
之上。"flow"
。subflow.json
。{
"id": "子流程定义节点",
...
"flow": [
{ "id": "Node 1", ... },
{ "id": "Node 2", ... },
...
{ "id": "Node n", ... }
]
}
最后的任务是更新您的 package.json
,以便 Node-RED 知道您的模块包含什么。
添加一个 "node-red"
部分,里面包含一个 "nodes"
部分,包含指向您的 .js
文件的条目:
{
"name": "node-red-example-subflow",
...
"node-red": {
"nodes": {
"example-node": "example.js"
}
}
}
如果您的子流程使用了任何非默认节点,您必须确保在 package.json
文件中将它们列为依赖项。这样可以确保它们与您的模块一起安装。
这些模块被列在标准的顶层 "dependencies"
部分 和 "node-red"
部分中的 "dependencies"
部分。
```json { “name”: “node-red-example-subflow”, … “node-red”: { “nodes”: { “example-node”: “example.js” }, “dependencies”: [ “node-red-node-random” ] }, “dependencies”: { “node-red-node-random”: “1.2.3” } }
版权所有 OpenJS Foundation 和 Node-RED 贡献者。保留所有权利。OpenJS Foundation 拥有并使用注册商标。有关 OpenJS Foundation 的商标列表,请参阅我们的 商标政策 和 商标列表。未在 OpenJS Foundation 商标列表 中列出的商标和徽标是其各自持有者的商标™或注册商标®。使用它们并不意味着与它们有任何关联或认可。
OpenJS Foundation | 使用条款 | 隐私政策 | OpenJS Foundation 章程 | 商标政策 | 商标列表 | Cookie 政策