Изменения в коде JavaScript в макросах RoomOS
Мы обновили механизм, запускающий макросы в RoomOS, и в результате этих обновлений некоторые соглашения и функции JavaScript больше не будут доступны для макросов. В частности, функции, связанные с CommonJS, больше не доступны. Вот некоторые распространенные примеры кода, нуждающегося в переписывании:
require(), в том числе:require('xapi')- требует перезаписи на стандартныйimportECMAScript. Например, изменено наconst xapi = require('xapi')import xapi from 'xapi'require.main
module, в том числе:module.exports- требует перезаписи на стандартный ECMAScriptexportmodule.name- следует заменить на_main_module_name()
Как это включается и выключается?
Эти изменения вступают в силу после xConfiguration Macros EvaluateTranspiledпереключения с Trueна False. Эта настройка существует уже давно, и она была внесена путем изменения значения по умолчанию в новых версиях с Trueна False.
Если после этого изменения макросы сломаются, явная настройка переключателя back (xConfiguration Macros EvaluateTranspiled: True) — это краткосрочное решение, позволяющее им работать в прежнем режиме. Однако обратите внимание, что это лишь временное решение: этот переключатель исчезнет после переходного периода.
Аналогичным образом, в старых версиях RoomOS это изменение можно протестировать без обновления, установив переключатель в положение. False
Примечание. Если макрос сохранен на устройстве во время нажатия переключателя, Falseа затем вы решите снова включить его, возможно True, потребуется повторно сохранить эти макросы в редакторе макросов.
Когда эти изменения вступят в силу?
Значение EvaluateTranspiledпереключателя по умолчанию было изменено на RoomOS в Falseмае 2025 года (11.28), что означает, что при обновлении устройства будут переключаться по умолчанию. В той же версии этап транспиляции при сохранении макросов через XAPI по умолчанию отключен. Если требуется транспиляция через XAPI, для параметра команды transpile должно быть явно установлено значение true.
Начиная с версии RoomOS в июле 2025 года (11.30), при включении переключателя диагностика будет отображаться. True Она по-прежнему будет работать в прежнем режиме.
В дальнейшем переключатель будет полностью снят, и устройство будет вести себя так, как если бы оно было настроено. False Мы планируем внедрить это изменение в RoomOS в ноябре 2026 года (27.0).
Все клиенты, которые, несмотря на все наши усилия по уведомлению и информированию об изменениях, сталкиваются с ошибками при постоянном сохранении изменений в RoomOS, могут все же использовать обновление программного обеспечения с задержкой (до 6 месяцев), предоставляемое Control Hub для устройств, зарегистрированных в облаке, чтобы отложить внесение изменений.
Почему это необходимо? Технические детали
Основная причина этого изменения заключается в том, что мы обновили наш движок JavaScript для использования QuickJS, который служит современной обновленной средой выполнения JavaScript для встраиваемых систем. После этого, поскольку современный движок JavaScript больше не нужен, мы теперь убираем поддержку транспиляции JavaScript. Устранение дополнительного этапа транспиляции всего кода сокращает время загрузки при развертывании и выполнении кода, а также снижает сложность платформы.
Переключатель движка JavaScript управляется нажатием кнопки xConfiguration Macros QuickJSEngine: Offchanged to On. Это изменение было выпущено в RoomOS в декабре 2023 года (11.11), и мы планируем удалить этот переключатель конфигурации в те же сроки, что и. EvaluateTranspiled
Мы вносим эти изменения, чтобы обеспечить максимальную производительность RoomOS и помочь вам эффективно и безопасно масштабировать развертывание расширений JavaScript.