在 node-RED 中将子流转换为模块

Converting subflows into modules in node-RED

我是 node-red 和 docker 的新手。在我的实习中,我被要求将一个子流转换成一个模块(以便在创建的每个节点 RED 实例的调色板中)所以,我从一个小例子开始,展示如何通过以下方式将自定义节点添加为模块按照这些步骤(node-RED 安装在 docker 容器中):

  1. 正在连接到 ec2 机器

  2. 通过执行命令进入容器内部 docker exec -it mynodered /bin/bash/

然后我按照本例 https://techeplanet.com/how-to-create-custom-node-in-node-red/ 中所示的步骤创建节点并安装它。之后我去“管理调色板”寻找最近安装的模块,但它不在那里......如果有人可以提供帮助,我将不胜感激。谢谢

首先,在 Node-RED 重新启动之前,使用 npm 在命令行上安装的节点将不会显示。

这个问题,在你的情况下,你在 docker 容器中创建了节点,在正常情况下,你在 运行 容器中创建的任何文件在你​​重新启动它时都会丢失.这是因为容器不会持久化更改。

同样在 docker 容器中,userDir 不是 ~/.node-red,而是 /data

因此,当您重新启动容器时,节点可能会丢失,并且它也不会安装到 /data userDir 的 node_modules 目录中,除非您有 /data 支持通过持久卷。

如果您想在本地机器上创建一个节点,您可以在本地测试它,方法是使用 npm 安装它,然后重新启动 Node-RED 的本地实例以获取新节点。

然后您可以使用 npm pack 命令创建一个 tgz 文件,您可以通过调色板管理器将其上传到远程实例,以便在需要时在 Docker 容器中对其进行测试。

要长期使用这个新节点,您有多种选择:

  • 使用合适的标签将节点发布到 public npm,并将其添加到 public Node-RED 节点列表,如 doc 中所述。这将允许任何人安装该节点。您应该只对您希望任何人都能使用的节点执行此操作
  • 构建一个自定义 docker 容器,在构建过程中安装您的节点。如何做到这一点的例子是 here
  • 使用自定义 settings.js 构建一个自定义 docker 容器,该容器指向私有 npm 存储库和目录服务,允许您托管自定义节点。涉及此内容的博客 post 是 here

其次您所遵循的指南用于构建 Node-RED 节点,而不是用于将子流转换为节点。虽然可以从头开始完全重新实现子流,但可能需要重新创建在使用的节点中完成的大量工作,但这并不是真正有效的方法。 正在努力构建一个可以自动将子流转换为节点的工具,但尚未准备好发布。

我建议您加入 Node-RED Slack 或 Discourse 论坛,以便在可用时收到通知。