Node-RED 0.20 现已可供安装。
如果要升级,请阅读升级说明。
社区调查
本次发布恰逢我们启动2019 社区调查。
我们与许多在 Slack 和论坛上的用户交流,很高兴听到 Node-RED 的使用情况。但我们知道,还有大量我们尚未交流过的 Node-RED 用户和开发者。
本次调查是我们更好地了解用户群体、他们如何使用 Node-RED 以及帮助项目保持正确方向的机会。
请花 10 分钟时间填写调查问卷:https://tiny.cc/NodeRED2019Survey
所有回复都将完全匿名,除非您选择与我们分享您的联系方式。如果您与我们分享您的联系方式,这纯粹是为了允许我们(Node-RED 核心团队,仅此而已)就您的回复进行跟进。
调查将持续到 4 月中旬,届时我们将把结果整理成报告,在此博客上分享。
立即参与调查! - 并向您的朋友和同事传播,帮助我们尽可能扩大受众。
与之前的版本不同,我们已经在过去几个月发布了 0.20 的几个 beta 版本。这使得我们能够获得更多关于新功能的反馈,并在更广泛地发布之前消除许多边缘情况。
感谢所有尝试过 beta 版的用户 - 这绝对是我们将在未来版本中继续采用的方法。
Node.js 版本支持
Node-RED 0.20 需要 Node.js 8.x 或 10.x - 我们不再支持在更早的版本上运行。
运行时/编辑器拆分
0.20 代码库经过了重大重构,现在它被拆分为多个模块。虽然这对大多数最终用户来说意义不大,但它是迈向 1.0 版的重要一步。
这项工作的一部分包括为各种模块及其公开的 API 编写文档。现在可以在此处获得。
关于如何单独使用这些模块,还有很多需要记录。如果您对此感兴趣,请与我们联系。
子流增强
子流状态
现在有一个新选项可以向子流添加“状态”输出。这可用于更新子流实例节点的状态。目前,对于子流,如果子流内部的任何节点发出状态事件,它将传递到包含子流实例的流中 - 但它看起来不像来自子流实例。现在,如果使用这个新的状态输出,只有传递给它的消息才会传递到父流,并且它们将正确识别为来自子流。这在处理状态事件和子流时提供了更多的控制和灵活度。
添加状态输出
状态显示在子流实例节点旁边,就像任何其他具有状态的节点一样
从子流内部重定向状态事件
访问父流上下文
在子流中使用上下文时,现在可以访问子流实例所在的流的上下文。这通过在上下文键名前加上 $parent.
来实现。例如,如果一个流的上下文值为 foo
,子流可以使用 flow.get("$parent.foo");
来访问它。
在 Change 节点中访问父流上下文
子流实例属性
现在可以在子流中定义环境变量。这些值是子流中的任何节点都可以引用,其方式与引用普通环境变量相同
- 通过将节点属性设置为
$(ENV_VAR_NAME)
- 通过在 typedInput 中选择
env
类型 - 通过在 Function 节点中使用
env.get('ENV_VAR_NAME')
这些属性可以在子流模板上设置,也可以在子流的各个实例上设置。这意味着您可以设计一个可以按实例定制的子流。与只能是字符串的进程级环境变量不同,子流上定义的环境变量可以是多种类型 - 字符串、数字、布尔值、JSON、缓冲区,甚至是另一个环境变量的引用。最后一个选项意味着您可以创建由其他环境变量组成的复合环境变量……哦,想想这些可能性。
当一个流引用一个环境变量时,如果它没有在子流中定义(或者在包含该子流的子流中,或者在包含**该**子流的子流中……依此类推),它将回退到进程级环境变量。如果也没有在那里设置,它将返回一个空字符串 ""
- 而不是 undefined
。
向子流模板添加环境变量
此处定义了一个环境变量 FOO
,其值为 "red"
。
向子流实例添加环境变量
编辑子流实例时,环境变量表列出了在子流模板上定义的环境变量。在此图中,您可以看到 FOO
已列出。可以为**此实例**自定义其值 - 如果您自定义它,右侧会出现一个按钮,允许您将其恢复为父子流定义的值。您还可以仅为此外添加新的环境变量 - 如上图所示的 BAR
。
这些新的子流功能解决了我们收到的大量关于它们的常见请求和反馈。我们认为这将使它们成为 Node-RED 中更强大的工具。
快速添加对话框
- 编辑器中的快速添加模式(Ctrl/Cmd-Click)进行了一些更新。现在,当对话框打开时,它会显示一个占位符节点。如果您使用 Ctrl/Cmd-Enter 确认要添加的节点,它会添加节点并保持对话框打开,以便您可以添加另一个节点。这意味着您可以完全通过键盘快速添加一系列节点(在最初的 Ctrl-Click 打开对话框之后)。
连线链接节点
现在,当您选择一个链接节点时,它会显示一个额外的端口,您可以从中单击并拖动一条线到另一个链接节点以连接它们。和以前一样,这些链接线只在您选择了一个链接节点时显示。
性能改进
Change、Switch 和 Join 节点在 0.19 中出现性能下降后,进行了一些性能改进——特别是当它们与上下文交互或使用 JSONata 表达式时。
例如,给定一个使用 JSONata 计算 payload*2
的 Change 节点,在我的笔记本电脑上,0.19.5 版本处理 65k 条消息大约需要 12 秒(5k 条消息/秒)。在此版本中,现在大约需要 5 秒(12k 条消息/秒)。
节点编辑对话框更改
节点的编辑对话框已重做为一组选项卡,而不是可折叠部分。这意味着我们可以在对话框中添加新部分,而不会损失宝贵的垂直空间。
节点描述
其中一个选项卡是描述字段,因此您可以为**任何**节点添加 Markdown 格式的帮助。当您选择节点时,内容将显示在信息侧边栏中。
为了帮助 Markdown 格式,对话框中添加了一个新的工具栏。它还可以扩展为全屏编辑器,并带有格式化文本的预览。
节点图标
在 0.19 版本中,我们引入了自定义节点图标的功能。现在已将其扩展为包括从 Font-Awesome v4 提供的一系列图标中进行选择,排除了任何特定于品牌的图标。
使用选项卡
双击选项卡栏即可添加新的流选项卡。选项卡将插入到您单击的位置 - 例如在两个现有流之间。
Cmd(或 Ctrl)-单击选项卡将其选中。您可以选择多个选项卡。选中后,按 delete 键将删除这些选项卡。
打开导出到剪贴板对话框(从菜单中,或 Cmd/Ctrl-E)将允许您导出所选选项卡。
编辑器
- 当您将一组选定的节点转换为子流时,这些节点将被移回子流选项卡的左上角。
- 您可以在上下文侧边栏中删除单个上下文条目
- 您可以在配置节点侧边栏中选择配置节点,按 Ctrl-Click 选择多个。按删除将删除选定的配置节点 - 比双击打开每个节点的对话框更容易。
- 当您在项目侧边栏中启动 git push/pull,或者从管理面板对话框中安装/删除节点时,您会看到一个“查看日志”按钮。这将打开新的事件日志(也可从菜单中访问,视图->事件日志)。这让您可以查看这些操作运行的基础 git/npm 命令的更多日志输出。
- “从剪贴板导入”对话框允许您上传文件而不是从剪贴板粘贴。如果您提供无效 JSON,它还能更好地突出显示错误。
- “导出到剪贴板”对话框允许您将流下载为文件,而不是复制到剪贴板。
- 部署菜单中新增了一个“重启流”选项——这将导致运行时从存储中重新加载其活动流并重启它们。
- 如果一个模块提供了已安装的节点类型,管理面板对话框将拒绝安装该模块。
运行时
- 添加
--safe
模式标志,允许在不运行流的情况下启动。如果某个流导致 Node-RED 崩溃,可以使用此功能——在安全模式下启动将允许使用编辑器修改流,然后部署更改以退出安全模式。 - 为自动化访问 adminAPI 添加设置定义的 accessToken
- 允许从命令行加载项目 - 在提供流文件名的位置指定项目名称将加载该项目。
- 添加了一个新设置
exportGlobalContextKeys
,可用于防止由functionGlobalContext
设置的全局上下文值在上下文数据侧边栏中列出。运行时设置文件中提供的默认值为false
,因此新安装将不会在侧边栏中看到这些值。现有安装如果没有此设置,仍将看到它们。
节点
- Catch 节点有一个新选项,仅处理未被另一个 Catch 节点捕获的节点错误。这意味着您可以在流中设置针对特定节点的 Catch 节点,然后设置一个捕获所有其他错误的 Catch 节点。
- HTTP Request 节点可以选择性地自动将 msg.payload 编码为 GET 请求的查询字符串参数。它还有一个新选项用于对 cookie 进行 URL 编码(如果,在极少数情况下,它们需要编码而不是保留为纯文本)。此节点现在还支持 Bearer 和 Digest 认证模式。
- MQTT In 节点现在可以配置为假定它接收的消息是 JSON,并发出解析后的对象。如果您确定您收到的所有内容都将是有效的 JSON,这将使您无需在 MQTT In 节点之后添加 JSON 节点。如果节点收到无效 JSON,它将记录一个错误,可以使用 Catch 节点处理该错误。
- 当客户端连接和断开连接时,TCP/Websocket 节点发出的状态消息现在包含更多关于连接/断开连接客户端的信息。