更改 RoomOS 宏中的 JavaScript 代码

我们已经更新了在 RoomOS 上运行宏的机制,由于这些更新,某些 JavaScript 约定和函数将不再有空到宏中。 特别是, 不再有空 CommonJS 相关函数。 需要重写的代码的一些常见示例包括:

  1. require(),包括:
    • require('xapi') - 需要重写为标准 ECMAScript 导入。 例如, const xapi = require('xapi') 更改为 从'xapi'导入 xapi
    • require.main
  2. 模块,包括:
    • module.exports - 需要重写为标准的 ECMAScript 导出
    • module.name - 应替换为 _main_module_name()

如何打开和关闭此功能?

这些更改将在 xConfiguration 宏评估转译 从 True 切换 False 生效。 此设置已存在很长时间,并且通过将新版本中的默认值从 True 更改为 False 来推出此更改。

如果宏在此更改中中断,则显式设置切换返回(xConfiguration 宏评估转译:True)是使它们像以前一样工作的短期修复。 但请注意,这只是一个临时解决方案:此切换将在 过渡期后消失

同样,在较旧的 RoomOS 版本上,通过将切换开关设置为 False,无需升级即可测试此更改。

注意:如果在切换 为 False 时将宏保存在设备上 ,而您稍后决定将切换开关 TURN 恢复 为 True,则可能需要在宏编辑器中重新保存这些宏。

这些更改何时生效?

从 RoomOS 5 月 2025 (11.28) 开始 ,“评估 Transpiled ”切换开关的 缺省值更改为 False,这意味着设备在升级后缺省情况下将切换。 在同一版本中,默认情况下关闭通过 XAPI 保存宏时的转译步骤。 如果需要通过 XAPI 进行转译,则必须将转译命令选项显式设置为 true。

RoomOS 7 月 2025 (11.30) 开始,当切换开关设置为 True 时,将显示诊断信息。 它仍将像以前一样工作。

今后,切换开关将被完全删除,设备的行为就像设置为 False一样。 我们的目标是在 2025 年 11 月推出此更改。 当我们看到有多少客户能够更新其宏时,此日期可能会更改,但时间线是以月而不是年为单位的。 确切日期将在此处和相关 RoomOS 发行版的发行说明中发布。

任何客户,尽管我们已尽最大努力尝试通知和通知更改,但在 RoomOS 中永久保留更改后,看到其宏失败,仍可使用 Control Hub 为云注册设备提供的(最多)6 个月的延迟软件更新来延迟更改。

为什么有必要这样做? 技术细节

这一变化的主要驱动力是我们更新了 JavaScript 引擎以使用 QuickJS,它充当嵌入式系统的现代更新 JavaScript 运行时。 之后,由于现代 JavaScript 引擎不再需要它,我们现在删除了对 JavaScript 转译的支持。 删除转译所有代码的额外步骤可以减少部署和执行代码时的加载时间,并降低平台的复杂性。

JavaScript 引擎开关由 xConfiguration 宏控制 QuickJSEngine:off 更改为 On。 此更改已在 RoomOS 12 月 2023 (11.11)中推出,我们计划在与 EvaluateTranspiled 相同的时间轴上删除此配置切换开关。

我们执行这些更改是为了确保 RoomOS 发挥到最佳性能,并且我们可以帮助您以高效、安全的方式扩展 JavaScript 扩展的部署。

在 roomos.cisco.com 阅读有关宏的更多信息。