子流可以打包为 npm 模块,并像任何其他节点一样分发。
当它们被安装后,会像常规节点一样出现在节点面板中。用户无法查看或修改子流内部的流。
在现阶段,创建子流模块是一个需要手动编辑子流 JSON 的过程。我们将来会提供工具来帮助自动化这个过程——但目前,这些说明应该能帮助您入门。
任何子流都可以打包成一个模块。在您这样做之前,需要考虑它将如何被使用。以下清单可以有效提醒您需要考虑的事项:
子流可以包含额外的元数据,用于定义它将被打包成的模块。
在子流模块属性编辑对话框中,您可以设置以下属性:
模块 (Module)
- npm 包名节点类型 (Node Type)
- 这将默认为子流的 id
属性。提供一个更好的类型值会很有帮助。与常规节点类型一样,它必须是唯一的,以避免与其他节点冲突。版本 (Version)
描述
许可证 (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": "Subflow Definition Node", ... },
{ "id": "Subflow Instance Node", ... }
]
[
之前。"flow"
的新属性。subflow.json
。{
"id": "Subflow Definition Node",
...
"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"
部分。
{
"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 基金会和 Node-RED 贡献者。保留所有权利。OpenJS 基金会拥有注册商标并使用商标。有关 OpenJS 基金会的商标列表,请参阅我们的商标政策和商标列表。未在 OpenJS 基金会商标列表中注明的商标和徽标是其各自所有者的商标™或注册®商标。使用它们并不意味着与其有任何关联或得到其认可。
OpenJS 基金会 | 使用条款 | 隐私政策 | OpenJS 基金会章程 | 商标政策 | 商标列表 | Cookie 政策