Node-RED 2.0 现已可供安装。如果升级,请阅读升级说明。
更新日志中有此版本的完整变更列表,但以下是主要亮点。
此版本的主要重点是放弃对那些本身已不再受支持的旧版本 Node.js 的支持。这反过来又使我们能够在内部进行一些重大的依赖项更新。这需要时间和精力才能正确完成。因此,这个版本中没有很多重大的新功能 - 但肯定有很多有用的东西可以尝试。
我们还发布了 Node-RED 流程调试器和 Linter 的第一个版本。这些是可选插件,真正提升了 Node-RED 编辑器内的开发者体验。在介绍它们之前,我们先看看 Node-RED 核心有哪些新内容。
需要 Node.js 12.17.x 或更高版本
Node-RED 2.0 *不* 支持任何低于 Node.js 12.17.x 的版本。
运行时特性
node-red admin init
命令
我们为 node-red
添加了一个新的命令行选项,以帮助您生成设置文件。
它会向您提出一系列关于如何配置 Node-RED 环境的问题,例如设置用户安全。
这使得开始使用一个配置良好、安全的 Node-RED 环境变得更加容易。
您可以使用 node-red admin
命令运行它。
node-red admin init
重构的默认设置文件
伴随着新的 node-red admin init
命令,我们重新组织了默认的设置文件。现在设置的顺序更合理,有更清晰的部分来帮助用户浏览。
您可以在这里查看新的默认设置文件。
默认流程文件名
我们更新了默认设置文件,将流程文件名硬编码为 flows.json
。以前我们没有设置它,所以运行时会使用主机名来生成流程文件名。这会在用户切换网络时造成困扰。由于这是对默认设置文件的更改,所有现有的安装将继续保持之前的行为。
编辑器特性
Monaco 文本编辑器
我们现在对 Monaco 文本编辑器提供了可选支持。这在 Function 节点和其他地方提供了更丰富的代码编辑体验。
目前,Node-RED 默认仍将使用 ACE 编辑器。要启用 Monaco,您需要编辑设置文件中的 editorTheme
部分,添加一个 codeEditor
部分,如下所示:
editorTheme: {
codeEditor: {
lib: "monaco"
}
},
我们针对许多常用节点测试了此编辑器,以确保它们能与 Monaco 协同工作,但可能存在一些 contrib 节点假定编辑器使用 ACE。如果您遇到任何问题,请告诉我们,以便我们与模块所有者提出。
CSS 主题变量
为了让节点/插件更容易地设置其 UI 元素的样式以遵循任何自定义主题,我们添加了一系列 CSS 变量,它们可以使用这些变量来获取主题颜色。
节点更新
Function 节点外部模块变更
在上一版本中,我们使 Function 节点更容易使用外部模块。在您的设置文件中启用后,您就可以在其编辑对话框中配置 Function 节点使用的模块。
根据对该功能的反馈,我们在此版本中进行了以下更改:
-
对于新安装,该功能现在默认启用。要禁用它,您需要将
functionExternalModules
设置为false
。 -
UI 已经过重新设计,以更清晰地列出模块及其可用作的变量。
-
我们现在同时支持 CJS 模块和 ES6 模块。
-
我们将模块安装的目录移回了您的用户目录的顶层。这意味着有一个单一的
package.json
文件列出您所有的依赖项。当您第一次运行 2.0 版本时,它会自动在新位置重新安装任何外部模块。
Inject 节点快速注入按钮
Inject 节点在其编辑对话框中有一个新按钮,它将使用编辑对话框中的值来触发 Inject 节点,而不是当前已部署的值。这使得在测试流程时快速注入不同的值变得更加容易。
请注意,主流程视图中的按钮仍将像以往一样注入当前已部署的值。
将 RBE
节点重命名为 Filter
(过滤器) 节点
RBE (Report By Exception) 节点是节点面板中隐藏的宝藏之一。鉴于它在论坛上回答问题的次数之多,很明显我们需要让它更容易被发现。在这个版本中,我们做了两件事:
- 将其添加到核心节点面板(之前是通过
node-red-node-rbe
模块安装的)。 - 将其重命名为
filter
(过滤器) 节点。
在底层,它仍然使用 rbe
节点类型,所以现有的流程不会受到影响。这也意味着如果您搜索 rbe
,它仍然会出现——所以遵循现有指南的用户仍然可以找到它。
给它命名为 filter
(过滤器) 应该能帮助用户找到它,并更直观地理解它的用途。这也为将来添加更多在“RBE”名称下不合适的过滤选项开辟了可能性。
移除了 tail
节点
我们已将 node-red-node-tail
作为默认依赖项移除。这意味着如果您的流程使用它,您可能需要手动安装该模块才能找回该节点。
其他节点更新
- 我们提供了一个新设置
fileWorkingDirectory
,可用于定义 File 节点解析相对路径时使用的工作目录。如果未提供该设置,节点将像以前一样——使用 Node-RED 进程的当前工作目录。 - 在速率限制模式下,Delay 节点现在可以使用
msg.rate
动态设置其速率。 - TLS 节点现在允许您指定一个 ALPN 协议。
- Debug 侧边栏支持显示 Map/Set 类型的属性。
- File In 节点新增一个选项,用于在每行发送一条消息时包含所有属性。
- Exec 节点新增一个选项,用于在 Windows 下运行时隐藏控制台窗口。
- Delay 节点现在可以通过
msg.flush
被告知清空指定数量的排队消息。 - WebSocket 客户端节点可以配置为自动发送心跳 ping 消息。
扩展开发者体验
使用像 Node-RED 这样的低代码编程工具的好处之一是,它抽象了许多关于事物如何工作的技术细节。它让您能够专注于解决手头的问题。
但是,仅仅因为它是低代码,并不意味着您不能拥有所需的工具来制作高质量的应用程序,并在事情不如预期时帮助调试。
为此,我们还发布了一对新的 Node-RED 插件,它们将为整体开发者体验带来一个阶跃式的变化。
流程调试器
首先是流程调试器。它的作用类似于常规的代码调试器,但是在流程级别。您可以在节点的端口上设置断点,可以是输入也可以是输出。然后,每当有消息到达断点时,它会暂停在该节点处,或者暂停整个运行时。
一旦暂停,它会显示流程中每个点有多少条消息在排队,并且在侧边栏中,您可以看到将要处理的消息队列及其顺序。从那里,您可以单步执行流程中的每条消息,甚至在流程中途删除它。
更多信息,您可以在这里找到插件页面。
流程 Linter - nrlint
我们发布的第二个插件是流程 Linter - nrlint。它可以根据 linter 提供的大量规则来识别流程中的潜在问题。例如,它可以警告您是否有未连接到 HTTP Response 节点的 HTTP In 节点,或者是否有节点在物理上重叠并可能互相遮挡。
我们仿照 eslint 设计了 linter,我们还将 eslint 捆绑在其中一个规则中,可用于检查您 Function 节点中的 JavaScript。
我们设计了 linter 在浏览器中使用 Worker 线程运行——这意味着它不会影响编辑器的性能。侧边栏会显示 linter 的结果,并让您快速导航到流程中需要注意的区域。
在编辑器之外,nrlint 也可以作为命令行工具安装和运行,以检查流程的 json 文件。这意味着它可以用于在构建管道中验证流程。
今天我们有一套最小的规则集,最近一次向社区征求意见的活动产生了一长串很棒的想法。
我们确信会有一些更深奥的规则可能不属于核心规则集。例如,一些第三方节点可能希望引入关于如何使用其节点的指导。为了支持这一点,linter 规则是可插拔的——允许创建自定义规则并通过 npm 与社区共享。
更多信息,您可以在这里找到插件页面。
下一步计划?
我们去年发布的发布计划目标是在 4 月底发布 2.0 版本,并在之后每 3 个月发布一个里程碑版本。鉴于我们已经比 4 月的目标晚了三个月,我们需要重新审视我们的发布计划。
2.0 版本的发布有些特殊。这是我们的第一个主版本号升级,它解锁了许多内部更改,因为我们不再需要担心旧版本的 Node.js。但是,整理这些内部更改花费的时间比预期的要长,包括一些上游问题一度阻碍了进展。
我们非常希望回到定期的发布节奏——有一个可预测的、众所周知的发布日期,我们都为之努力。这是我们前进过程中需要弄清楚的事情。但今天,我们重置时钟,将注意力转移到将在 10 月底发布的 2.1 版本上。
如果您有特别希望在 Node-RED 中看到的功能,那么*现在*是时候加入论坛并分享您的反馈了。
至于 1.x 分支,它现在处于维护模式。这意味着如果报告了错误并有可用的修复程序,我们仍会根据需要进行维护版本的发布。
对于贡献者们,我们将在 github 中调整我们的代码分支,以反映我们现在拥有的不同分支流——我们将通过 Slack 中的 #core-dev 频道分享更多细节,所以如果您感兴趣,请来打个招呼。