Node-RED 3.1 现已可供安装。如需升级,请阅读升级说明。
坦率地说,这个版本的发布有些迟了。我们早在二月份就发布了第一个 beta 版——当时以为那会是唯一的 beta 版。但一件事接着一件事,在经历了四个 beta 版之后,我们终于推出了正式版,供大家享用。
这些延迟对我们的发布计划产生了连锁反应。我们打算对计划做一些调整,但仍计划在不久的将来发布 Node-RED 4.0,以跟上即将停止支持的 Node.js 版本。
我们也会恢复更定期的维护版本发布,以保持项目的进展。
话虽如此,尽管没有像往常一样附上视频,让我们还是深入了解一下 3.1 版本带来了哪些新功能。和往常一样,更新日志中包含了此版本所有更改的完整列表。
编辑器更新
选项卡上的变更通知
现在,选项卡栏会为任何包含更改的选项卡显示一个变更图标。这使得在流中查找已更改的位置变得容易得多。
更大的工作区
我们偶尔会收到请求,希望让选项卡画布更大一些。甚至有人讨论过让它变得无限大——允许一个流可以按需扩展到任意大小。虽然这是个好主意,但在这个版本中,我们只是简单地将每个选项卡的大小从 5000x5000 增加到了 8000x8000。
我们仍然建议使用诸如子流和链接节点之类的工具来帮助组织您的流,但至少这个快速的更改将在您需要时为您提供更多可用空间。
锁定流
您现在可以锁定一个流(编辑器中的选项卡),以防止其被修改。在锁定状态下,您无法编辑节点、添加新节点、修改连线……任何操作都不行。
这有什么用呢?您可能有一个“关键任务”流,希望格外小心,避免意外更改。您可能想与他人协作处理某些流,但将其中一些标记为“禁止访问”。
在此版本中,任何人都可以锁定和解锁流,但这为未来可能出现的情况奠定了基础,即特定用户可能没有权限解锁流——从而只允许他们编辑被允许的流。
锁定/解锁流的选项可在右键上下文菜单中找到——信息侧边栏浏览器中也新增了一个挂锁按钮。
为了实现这一点,我们修改了编辑器内部管理“节点”的方式,以防止它们在锁定的流上被修改。API 没有变化,但这确实意味着如果尝试在锁定的流上进行某些调用,可能会失败。这一点已经在编辑器的所有核心功能中进行了大量测试,但第三方节点的作者们非常有创造力,有可能有人在他们的节点实现中做了一些偷偷摸摸的意想不到的事情,从而被此功能绊倒。所以,如果您发现此功能有任何奇怪/不一致的行为,请务必告知我们(并准备好浏览器 JavaScript 控制台中的任何错误消息)。
隐藏流
我们在几个版本前添加了隐藏流的功能。这是通过将鼠标悬停在选项卡上时出现的“眼睛”图标来完成的。
我们收到了大量的反馈,包括我们自己的经验,都认为太容易不小心点击那个按钮,导致东西在不经意间消失。
因此,在这个版本中,我们去掉了选项卡上的那个按钮。流仍然可以被隐藏,但您需要通过右键单击选项卡栏的上下文菜单选项来操作。您仍然可以使用信息侧边栏浏览器中的眼睛按钮。
新的分组用户体验
根据社区对在编辑器中使用分组功能的反馈,我们在这次更新中对分组功能进行了重大改进。
您现在可以点击分组内外的任何节点,并直接与之交互。无需再多次点击才能访问一个节点。
由于这个改变,您现在需要通过点击分组的边框并拖动它来移动分组。但如果您已经将边框设为不可见怎么办?现在,当您的鼠标悬停在它上面时,它会高亮显示。
我们还实现了一次性将多个节点拖入一个分组的功能——之前我们只支持一次拖动一个节点。
为了回应一个特别的反馈,如果您在拖动分组内选中的节点时按住 alt
键,您可以将它们拖出分组。
总的来说,这应该会带来更直观的用户体验。
Catch/Status 节点的组级别作用域
Catch/Status 节点已经可以配置为处理流中的特定节点。现在它们也可以配置为只处理与它们在同一个分组(或任何嵌套分组)中的节点。
这为您组织流及其错误处理提供了更多选择。
更新的上下文菜单
我们扩展了上一个版本中添加的上下文菜单的实用性。现在菜单中提供了更多常用选项,并且根据您点击打开菜单的对象提供了更好的相关选项。这包括右键单击工作区顶部的选项卡栏以获取特定于流的选项。
向节点/流描述中添加图片
所有节点和流的编辑对话框中都有一个“描述”选项卡。这让您可以编写文档(使用 Markdown),当选中该项时,这些文档会显示在信息侧边栏中。
在这个版本中,您现在可以直接将图像拖到 Markdown 编辑器中,它们将被内联。这是通过将图像直接进行 base64 URL 编码并嵌入到 description 属性中来实现的。
Mermaid 图表
我们还添加了对 Mermaid 图表的支持。这些图表可以直接在 Markdown 中定义,然后在侧边栏显示时渲染成图像。GitHub 最近也添加了对它们的支持,我发现在纯文本不足以表达时,它们在编写文档方面非常有用。
全局环境变量
我们支持为单个流、子流或分组定义作用域环境变量已经有一段时间了。但是,定义一个对所有流都可用的环境变量的唯一方法是通过您的设置文件。这种方式不太方便,也不易于移植。
因此,在这个版本中,您现在可以通过用户设置对话框定义全局环境变量。
在底层,这些变量会作为一种新的核心配置节点类型添加到您的流中。这意味着将一个带有全局环境变量的 3.1 版本的流导入到早期版本的 Node-RED 中,会导致出现未识别的节点警告——这一点需要注意。
新的子流环境变量
在子流中,您现在可以使用 NR_SUBFLOW_NAME
、NR_SUBFLOW_ID
和 NR_SUBFLOW_PATH
来访问该子流实例节点的这些属性。
这些加入了现有的 NR_NODE_*
/NR_FLOW_*
和 NR_GROUP_*
等效变量。
环境变量求值方式的变更
环境变量是静态定义的值,在流运行时无法更改。但存在一些边缘情况,例如使用 JSONata 表达式 $now()
,它会在每次被引用时重新求值。
由于未来需要使 JSONata 完全异步化,我们改变了环境变量的求值方式——它们的值现在都在流启动时生成,并且不会再次重新求值。
这应该不会导致任何行为上的改变,除非您依赖于 $now()
这个并非有意为之的技巧。
由于节点可能依赖于环境变量的值,我们还更新了关于“已修改节点”和“已修改流”部署类型的逻辑。现在,在流级别更改一个环境变量将导致该流上的所有节点都被视为已修改。对于这个版本来说,这是一个有点粗糙的解决方案,我们将来可能会将其优化得更具选择性,只针对引用了已更改环境变量的节点——但这将是未来的工作。
链接到节点帮助
现在每个节点对话框的页脚都有一个帮助按钮。点击它将打开帮助侧边栏并显示……你猜对了……该节点的帮助信息。
弃用对 JSONata 的同步访问
这是为节点作者而非最终用户准备的。
JSONata 2.0 最近发布了,并承诺会带来许多显著的性能改进。然而,它也带来了一个重大的破坏性变更——您不能再同步地求值表达式。因此,我们还不能马上升级到它,但我们可以为此做一些准备工作。
自从我们将 JSONata 引入 Node-RED 以来,我们为节点提供了一套标准的 API。值得注意的是:
RED.util.evaluateNodeProperty
- 用于求值各种标准类型的属性RED.util.evaluateJSONataExpression
- 用于求值一个准备好的 JSONata 表达式
这两个函数都接受一个可选的回调参数,允许它们异步求值——然而,它们也都支持同步行为。
在这个版本中,我们已经*弃用*了不带回调参数调用 evaluateJSONataExpression
的做法。推而广之,如果与 JSONata 一起使用,evaluateNodeProperty
将需要一个回调函数。
在不使用回调的情况下使用这些 API 将在日志中触发一个警告,并附带完整的堆栈跟踪,希望能帮助识别导致该警告的节点。
我们打算在今年夏天的 Node-RED 4.0 中更新到 JSONata 2.0——所以我们希望找出所有需要更新的节点。
改进了水平对齐节点的连线
在论坛上进行了这次讨论后,我们对连线布局逻辑做了一些修改,以改善水平布局节点上连线回环的情况。
这是一对前后对比的截图
运行时更新
为 httpStatic 路由提供独立的 http 中间件
现在可以为不同的 httpStatic
配置路由配置独立的中间件函数。
详情请见 #4229。
下一步计划?
正如我开头所说,这个版本的发布有些迟了,并且推迟了现有的发布计划。
随着 Node.js 16.x 将在*下周*停止支持,我们将在不久的将来推进 Node-RED 4.0 的开发。目前,我们强烈建议用户现在就使用 Node 18 或 20。
作为一个开源项目,我们依赖于社区的贡献。我们拥有一个强大而充满活力的用户社区,论坛上的活跃度就是最好的证明。看到社区成员互相支持,真是太好了。