Node-RED 1.3 现已可供安装。如果升级,请阅读升级说明

更新日志包含此版本中的完整更改列表,但以下是亮点。

请注意,这是最后一个可在 Node 8 或 10 上运行的版本。

下个月我们将发布 Node-RED 2.0,届时将取消对这些 Node 版本的支持,因为它们已达到生命周期结束。


发布视频即将推出 - 订阅频道,以免错过!


主要功能

Function 节点使用 npm 模块

我们使 Function 节点更容易使用额外的 npm 模块。

通过在您的设置文件中将 functionExternalModules 设置为 true,您将能够为您的 Function 节点配置它将使用的附加模块列表。当您部署流时,运行时将自动尝试安装这些模块。

functionGlobalContext 方法不同,在 functionGlobalContext 方法中,您的 Function 节点必须在使用模块之前从全局上下文检索模块,而此新功能加载的模块会自动在您的代码中被 require 和定义。

编辑对话框中有一个新的 setup 选项卡,您可以在其中配置节点输出的数量和节点使用的模块列表。(如果您未启用 functionExternalModules 设置,您将只看到输出字段)。

您会看到我们已经重新标记了其他选项卡,以使您更清楚地了解这些选项卡中的代码何时运行。

更多详情

在 Change/Switch 节点中引用 msg 属性

现在可以在 Change 和 Switch 节点中嵌套对消息属性的引用。

例如,如果您从多个传感器接收温度。每个消息都将 msg.topic 设置为传感器所在的房间,msg.payload 是值。您希望将每个房间的当前温度存储在 flow.rooms 下的上下文中——例如 flow.rooms.kitchenflow.rooms.garage

在以前的 Node-RED 版本中,要使用 Change 节点执行此操作,需要使用 JSONata。例如

  • flow.rooms 设置为表达式 $merge([$flowContext('rooms'),{$.topic:$.payload}])

更有可能的是,用户会回到 Function 节点——这是我们希望避免的事情。

在 1.3 版本中,现在可以将 Change 节点配置为

  • flow.rooms[msg.topic] 设置为 msg.payload 的值。

事实上,任何在后台使用 RED.util.getMessageProperty(...) 工具的节点都将获得此功能。

更多详情

Node-RED 插件框架

我们为 Node-RED 引入了一个新的插件框架,使其更容易自定义和添加新功能。此功能还处于早期阶段——但未来将构成许多新事物的基础。通过插件而不是核心代码提供额外功能,可以使核心更小,并使嵌入 Node-RED 的应用程序更容易选择他们想要的“额外”功能。

更多详情

利用这个新框架,今天有两种新类型的插件可用

  • 编辑器主题插件,使用户更容易安装新主题并在其设置文件中启用它们。更多详情

    这里有大量不错的贡献主题可供选择。此处。请留意这些主题的更新插件版本。

  • 库源插件。这些将允许用户配置将在编辑器内的导入/导出对话框中出现的附加库。我们正在发布一个本地文件系统插件(@node-red/library-file-store)作为第一个示例。更多详情

添加额外资源

插件和节点的一个共同要求是能够将附加资源加载到编辑器中。这可以是帮助文本中的图像,或额外的 JavaScript 库。

以前,这需要节点进行大量额外工作才能使这些资源可供加载。

使用插件框架,我们使这更容易做到——这适用于节点和插件。

现在,如果模块在顶层有一个名为 resources 的文件夹,运行时将自动使其内容可供通过 Admin HTTP API 加载。

节点/插件仍然负责在编辑器中加载该内容,但现在它们不需要在运行时创建路由。

创建节点文档已更新,其中包含更多详细信息

npm 打包子流

现在可以将子流打包为模块并发布到 npm,以便像任何其他节点一样安装到面板中。

作为其中的一部分,子流属性编辑对话框有一个新的“模块属性”选项卡,您可以在其中设置子流的可选元数据,这些元数据可用于生成 npm 模块。

生成模块的过程目前完全是手动的。我们已在创建节点指南中添加了一个部分,详细介绍了该过程。

更多详情

编辑器特性

导出预览

导出对话框现在显示您正在导出的结构化列表。原始 JSON 仍然可以在对话框的第二个选项卡中看到。这应该有助于用户理解他们正在导出的内容。

选择节点

如果您按住 Shift 键单击一个节点,我们已经会自动选择其流中的所有节点。

在此版本中,如果您按住 Shift 键单击节点的左侧,我们将选择所有上游节点。如果您按住 Shift 键单击右侧,我们将选择所有下游节点。按住 Shift 键单击节点的中间将像以前一样选择整个流。

我们还为这些添加了相应的操作和默认键盘快捷键

  • core:select-connected-nodes - alt-s c - 选择当前选定节点连接的所有节点。
  • core:select-upstream-nodes- alt-s u - 选择从任何当前选定节点的输入可达的所有节点
  • core:select-downstream-nodes - alt-s d - 选择从任何当前选定节点的输出可达的所有节点

更多详情

打开子流

以前,要打开子流,您必须首先双击工作区中的实例,然后单击出现的编辑对话框中的“编辑子流模板”按钮。

在此版本中,如果您在双击节点时按下 Ctrl(或 Mac 上的 Cmd),它将直接带您进入子流模板选项卡。类似地,如果选择了子流实例,在按下 Enter 键时按住 Ctrl(或 Cmd)也会执行相同的操作。

我们添加了一些键盘快捷键来帮助在工作区中导航。

  • 您可以使用光标键更改工作区中选定的节点。
  • 您可以使用 Ctrl/Cmd-[Ctrl/Cmd-] 在选项卡之间切换
  • 当您在选项卡之间跳转时,例如使用 Ctrl-Enter 转到子流模板选项卡时,您可以使用 Ctrl/Cmd-Shift-ArrowLeft 返回到您所在的上一个选项卡。如果您使用它返回,那么您可以使用 Ctrl/Cmd-Shift-ArrowRight 在选项卡历史中前进。

键盘快捷键

现在可以通过设置文件中的 editorTheme 选项设置自定义键盘快捷键。这意味着您可以更轻松地在实例之间复制您的自定义设置。更多详情

其他编辑器更新

  • 如果您重新排列侧边栏选项卡,我们现在确保重新加载编辑器时始终显示第一个选项卡。
  • 删除正在使用的子流实例时添加确认对话框
  • 信息侧边栏中的大纲视图现在显示每个子流有多少个实例。单击数字将打开搜索对话框,列出所有实例。
  • 您可以在大纲视图中单击一下即可切换组内容的启用/禁用状态

运行时特性

externalModules 设置

有一个新设置可用于控制可以安装到 Node-RED 中的内容 - externalModules

这涵盖了两件事 - 可以通过面板管理器安装的新节点,以及 Function 节点可以加载的模块。

在此设置下,您可以提供 allowdeny 列表,这些列表用于确定运行时可以加载哪些模块。这些列表也由编辑器用于过滤面板管理器显示的节点列表。

此新设置替换了一些现有设置,这些设置现已弃用。

  • editorTheme.palette.editable 用于 externalModules.palette.allowInstall
  • autoInstallModules 用于 externalModules.palette.allowInstall = trueexternalModules.autoInstall = true
  • autoInstallModulesRetry 用于 externalModules.autoInstallRetry
  • editorTheme.palette.upload 用于 externalModules.palette.allowUpload

更多详情

其他运行时更新

  • 您现在可以通过设置文件中的 lang 选项明确设置运行时要使用的语言。更多详情
  • 停止流时,配置节点现在最后停止,以便流节点在尝试停止自身时可以依赖它们仍然存在。更多详情
  • 您现在可以通过设置文件中的 editorTheme.projects.workflow 选项默认使用简化的 Git 工作流。更多详情
  • httpAdminMiddlewarehttpNodeMiddleware 现在可以是一个要应用的中间件数组,而不仅仅是一个单一函数。更多详情

节点功能

  • MQTT 节点现在支持 MQTTv5 以及 v5 引入的绝大多数新功能。
  • 许多核心节点已更新以支持触发 Complete 节点 - Batch、Delay、Split、Join、Trigger
  • Exec 节点不再默认追加 msg.payload - 这经常困扰用户。这仅适用于新添加的节点 - 现有节点不会受到影响。我们还更新了 Exec 节点,以便您可以选择追加 msg.payload 以外的消息属性。
  • Inject 和 Change 节点现在将在编辑对话框关闭时突出显示其配置中的任何错误。
  • Function 节点现在公开 node.outputCount,因此您的代码可以知道节点已配置了多少个输出。