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

我们重点介绍了此次发布的一些主要亮点。此外,还有大量的社区贡献,包括错误修复、功能、文档和翻译。没有这些贡献,我们将无法做到这一切——非常感谢所有参与者。

变更日志包含此版本中的所有更改。



Node.js 18 或更高版本

Node-RED 4.0 至少需要 Node.js 18。在发布时,我们推荐使用 Node 20 作为活跃的 LTS 版本,它将继续接收更新直到 2026 年 4 月。

编辑器更新

flow/globalenv 输入的自动补全

Node-RED 在编辑器中已提供 msg 字段的简单自动补全功能。我们现在已将其扩展,使其也适用于 flow/global 上下文输入以及用于访问环境变量的 env 类型。

这使得处理这些类型的属性变得更加容易——确保您使用的是现有内容,而无需在编辑器中切换不同的视图来确保名称正确。

对于环境变量,它还会显示值的设置位置——这在您有嵌套组和子流可能覆盖特定值时非常有用。

在子流程中自定义配置节点

这需要一些解释。子流程是 Node-RED 允许您创建流程并在流程中添加其多个可重用实例的一种方式。例如,子流程可以连接到 MQTT 代理并对其接收到的消息进行一些标准处理,然后再发送出去。然后,子流程可以公开一组属性,这些属性可以为每个实例进行自定义。在我们的示例中,这可以是 MQTT 节点订阅的主题。

然而,在该示例中,MQTT 节点的代理配置将锁定到每个实例中的相同代理配置节点——这是我们在 Node-RED 4.0 中正在解决的问题。

我们正在使其能够在子流程属性中公开配置节点的选择——这样每个实例都可以进一步自定义。

另一个常见的用途是与 Node-RED Dashboard 结合使用——它使用配置节点来设置小部件的位置。目前在 Node-RED 中,您无法真正在子流程中使用仪表板节点,因为最终会在同一个组中出现多个小部件副本。通过此更新,您将能够为子流程实例配置要将其内容放置到哪个仪表板组中。

时间戳格式化

注入节点自 Node-RED 早期就提供了注入时间戳的功能。它实际设置的值是自纪元(即 1970 年 1 月 1 日)以来的毫秒数。如果您习惯于使用 JavaScript,那么这是一种完全正常的传递时间的方式。然而,这并非总是必需的,流程最终会使用函数节点以某种方式重新格式化它。

在 4.0 中,我们增加了选项来选择时间戳在开始时生成的格式。现在,格式化时间和日期可能是一个选项的“潘多拉魔盒”。因此,对于这个初始版本,我们通过提供三个选项来保持简单:

  • 自纪元以来的毫秒数 - 现有选项,只是更明确地标记了它是什么
  • YYYY-MM-DDTHH:mm:ss.sssZ - 也称为 ISO 8601
  • JavaScript Date 对象 - 标准 Date 对象

有空间允许在节点中设置自定义格式字符串——但我们首先会看看对这些新选项的反馈。

多人模式

我们已经做了一些更改,以改善多人同时打开编辑器时的用户体验。

当通过设置文件启用时,新的多人模式允许您查看其他用户何时打开编辑器以及他们在哪里——他们打开了哪个选项卡以及他们是否正在编辑节点。

这是朝着实现实时查看其他用户所做更改的长期目标迈出的一小步。

此新模式默认未启用。要启用它,您需要将设置文件中的 editorTheme.multiplayer.enabled 属性设置为 true。我们已在默认设置文件中添加了占位符,但对于现有安装,您需要自己添加。您可以在此处查看它的样子。

更好的后台部署处理

与新多人模式相同的主题,我们还对编辑器中现有的“后台部署”处理进行了一些改进。这是指当您在编辑器中忙碌时,有人部署了新流程的情况。

以前,您会收到一个无法忽略的通知,并且不得不中断您正在做的事情来处理。如果您的同事特别高效并频繁部署,您每次都会收到新的中断。

在此版本中,我们使通知更不具侵入性。它不再是模态的,因此您可以继续您正在做的事情,而无需采取任何行动。我们将其设计成细线型,因此它不会妨碍,并且会在短时间后自动关闭。与类似的运行时通知一样,如果发生后台部署,我们现在还会在标题中显示一个警告图标——因为它最终需要处理——单击该图标会显示通知,因此您可以选择何时采取行动。

改进的移动节点差异视图

在审查流程中的更改时,无论是由于后台部署还是作为项目功能的一部分,我们现在都会将仅移动的节点与已进行配置更改的节点分开突出显示。

当面对一长串更改时,这将使您更容易发现您关心的更改。

为只读用户提供更好的反馈

以前,如果用户对编辑器只有只读访问权限,他们可以进行更改并点击部署按钮——但此时才被告知他们无法进行更改。

在此版本中,如果当前用户没有部署更改的权限,部署按钮现在会显示一个锁定图标。他们仍然可以在工作区中进行更改,但部署按钮将不会启用。

新的配置节点选择 UI

我们更新了配置节点选择的用户界面,以简化添加新配置节点的任务。

新用户的反馈显示,当列表中已选择一个配置节点时,他们对如何添加第二个配置节点感到困惑。现在,在现有节点选择旁边有一个专门的添加按钮。

其他更新

  • 调色板管理器现在列出您已安装的插件和节点。
  • 调色板侧边栏现在会记住您如何展开或折叠不同的类别

运行时

大型流程的部署速度更快

我们更换了运行时用于克隆流配置的库。新库速度更快,内存使用更少。

在“典型”流程中,增益不太明显,但对于那些拥有大型流程的用户,应该会有所改进。

在我的测试中,一个包含数百个选项卡、每个选项卡包含数百个节点以及一些子流的配置,部署时间从 8 秒缩短到仅略高于 1 秒。

更新了 JSONata

JSONata 库用于在 Node-RED 中提供 expression 类型——这是一种非常强大的处理 JSON 对象的方式。在此版本中,我们已更新到 JSONata 的新主要版本,它带来了一系列性能改进。

但它也带来了底层调用方式的重大改变。我们已经在 3.1 版本中为此做好了准备,如果发现节点访问不正确,就会在日志中添加大量警告。在此版本中,该警告将变为错误。

鉴于在 3.1 版本中我们没有听到太多关于此的投诉,要么是警告未被注意到,要么这不是一个普遍问题。然而,这将是您升级时需要注意的问题。

其他更新

  • 以下配置选项已添加到默认设置文件中
    • httpAdminCookieOptions 可用于自定义作为身份验证系统一部分在 cookie 上设置的选项。
    • httpStaticCors 可用于为通过 httpStatic 选项提供的内容设置自定义跨源资源共享规则
  • node-red --version 现在在不启动 Node-RED 的情况下报告 Node-RED、node.js 和操作系统信息。

节点更新

更好的 CSV 节点

CSV 节点已经进行了大修,以使其更符合标准。事实证明,CSV 有一堆棘手的边缘情况,大多数用户不会遇到——但如果你遇到了,你就会被卡住。

新节点遵循 RFC4180 标准,并且速度更快——全面获胜。

使用 CSV 节点的现有流将保持“旧版”模式,直到它们被修改为使用新的解析器。

更新了代理处理

HTTP 请求节点对代理的处理已更新,以解决多个问题,并更好地支持用于配置代理的各种标准环境变量。

详细信息请参见原始问题和修复该问题的拉取请求

其他更新

  • TCP 节点 - 复位时,如果无有效载荷,保持断开连接 @dceejay
  • HTML 节点:添加收集属性和内容的选项 (#4513)
  • 让拆分节点指定要拆分的属性,并正确地自动连接加入 (#4386)
  • 修复更改节点以在需要时返回布尔值 (#4525)
  • 在保持连接模式下,允许 msg.reset 重置 TCP 请求节点连接 (#4406)
  • 允许调试节点状态消息长度可通过设置配置 (#4402)
  • 功能:添加为 WebSocket 客户端设置请求头的功能 (#4436)

完整变更日志

此版本中的所有更改都可以在变更日志中找到

感谢所有为本次发布做出贡献的人——没有你们,我们无法做到!

社区

作为一个开源项目,我们依赖于社区的贡献。我们拥有一个强大而充满活力的用户社区,这在论坛上的活跃度得到了很好的体现。看到社区互相提供支持真是太棒了。

如果您有兴趣为 Node-RED 做贡献,现在是时候来论坛Slack 上与我们交流了。