Node-RED 0.10.6 现已可下载或通过 npm 安装

如果要升级,请阅读升级说明

请记住,目前,我们不支持 Node.js v0.12 或 io.js。

关于版本号

您可能已经发现此版本是 0.10.6。您可能想知道 0.10.5 发生了什么。这标志着我们将对版本编号采取略有不同方法的首次发布。

tl;dr:发布到 npm 的版本,其最后一位数字将为偶数。GitHub 上正在开发的最新代码将具有下一个奇数。

以前,我在发布新版本之前的最后一次提交是增加 package.json 中的版本号。在那时,任何通过 npm 安装该版本的人都会获得该版本。然后我们将在 git 中继续开发。如果有人想通过克隆仓库来尝试 git 中的最新代码,它的 package.json 中的版本号仍将与之前的版本相同。

这给用户报告问题时造成了一些困惑,也给将 Node-RED 作为依赖项引入的自动化构建带来了一些技术难题。

通过在发布后立即在 git 中增加版本(使其变为奇数),并在下一次发布之前立即增加版本(使其变为偶数),有助于区分不同的级别。

编辑器更改

编辑器中进行了一些小的更改。其中一些值得强调的更改是:

  • 我们对编辑器中流的绘制方式进行了一些性能改进。您拥有的节点/连线越多,它们会越明显。

  • 调色板已进行了逾期更新,以使节点的显示方式与其在工作区中的显示方式保持一致。

Palette Update

  • 如果您尝试在未部署更改的情况下离开编辑器,您将收到浏览器警报,警告您将丢失更改,并提供留在页面上的选项。

Confirm Navigation

  • 一个常见问题是,在部署 Inject 节点之前单击其按钮,这不起作用。或者当它有未部署的更改时,单击按钮会导致当前部署的版本触发。

现在,如果一个节点有未部署的更改,按钮会视觉上禁用。

Inject buttons

  • 节点动作按钮可能导致意外行为的另一个区域是在编辑子流时。子流最好被认为是节点的模板。在编辑子流时,您正在编辑模板,而不是子流的实际实例。在此视图中,节点动作按钮,例如 Inject 节点上的按钮,不对应于运行时中的单个节点,因此单击它们将不起作用。为了反映这一点,当编辑子流时,按钮被禁用。

  • 说到子流,您现在可以通过双击调色板中的子流条目进入子流的编辑视图。

  • 我们已经放弃了 Eclipse Orion 富文本编辑器组件,转而使用 ACE 代码编辑器,用于 Function、Template 和 Comment 节点。我们仍然将 Orion 库加载到编辑器中,因为我们知道有一些第三方节点依赖于它。

节点更改

Catch 节点

调色板中的许多节点在行为上都是乐观的;它们假定事情会成功,因此错误会导致流程停止这一事实被忽略了。

实际上,事情确实会出错。文件写入失败、TCP 套接字连接失败、用户编写的 Function 节点包含错误。一旦您想要创建一个能够处理这些场景的流程,就会变得有点棘手。

此版本引入了新的 Catch 节点。此节点可用于捕获同一选项卡上其他节点抛出的错误并触发错误处理流。该节点会发送在发生错误时正在处理的消息,并允许采取任何必要的步骤。

对于基于 HTTP 请求的流,这一点尤其重要,无论发生什么,流都必须完成并返回响应。

Error flow example

我们将改进各个节点的文档,以突出哪些情况会触发 Catch 节点以及在什么情况下触发。

Function 节点

Function 节点有两个新特性。

首先,如果它需要将某些内容记录到 Node-RED 日志中,它现在可以使用以下函数之一

node.log("something something logging");
node.warn("this is a warning");
node.error("something went wrong",msg);

其中最后一个 node.error 可以选择性地接受第二个参数,即正在处理的消息。如果传入此参数,它将触发同一选项卡上的任何 Catch 节点。

第二个变化是多次被要求的功能,但我们花了一些时间才确保将其正确地连接起来。

现在,Function 节点不再需要返回要发送的消息,而是可以随时调用新的 node.send() 函数来发送消息。这个小的补充意味着可以在 Function 节点中编写执行异步操作的代码。

增加此功能的一个后果是,在某些情况下,如果节点正在停止,Function 需要收到通知,以便它可以取消任何未完成的活动。就像运行时节点 API 一样,Function 可以通过调用以下命令注册其自己的 close 事件处理程序

node.on('close',function() { })

文档已更新以涵盖这些内容。

Change 节点

Change 节点使得在不使用 Function 节点的情况下,轻松设置、更改和删除消息属性成为可能。用户仍然使用 Function 节点的一个常见原因是他们想要进行多次更改,而为每个所需的更改在流中放置一个 Change 节点会使工作区变得拥挤。

此版本引入了更新的 Change 节点,允许您指定多个规则,这些规则将应用于通过的每条消息。

Change Node edit dialog

运行时更改

正如前几个版本中强调的那样,我们已弃用了我们某些节点中的行为,即消息的属性可以覆盖节点中明确设置的属性。我们在 0.10.1 版本中添加了警告,以在用户使用此弃用行为时突出显示。

在此版本中,我们已将节点实现进行了切换,以便消息的属性不再覆盖节点中明确设置的属性。如果我们发现消息中包含先前会覆盖节点属性的属性,我们已更新了记录的弃用警告。

节点 API 更改

我们已将 onpaletteaddonpaletteremove 属性添加到节点的定义中。如果节点对 UI 有任何贡献,则应在 onpaletteadd 函数中完成,并在 onpaletteremove 函数中删除。这确保了节点可以动态地从调色板中添加和删除,而不会留下残留物。

一个节点现在可以为 close 事件定义多个处理程序,只需多次调用 this.on('close',function(){...}) 即可。

命令行管理工具

我们还发布了 Node-RED 命令行管理工具。这允许您远程添加/删除/启用/禁用 Node-RED 中的节点,而无需重新启动。

文档中有更多详细信息。

此工具利用了我们已存在几个版本的管理 API。随着该工具的发布,我们现在很高兴该 API 足够稳定,可供其他人使用。该 API 已在我们的文档的新API 部分中进行了记录。