Зміни в коді JavaScript в макросах RoomOS

Ми оновили механізм запуску макросів у 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 Macros EvaluateTranspiled перемикається з True на False. Цей параметр існує вже давно, і його змінюють шляхом зміни стандартного значення в нових випусках з True на False.

Якщо макроси порушуються при цій зміні, явне встановлення перемикача назад (xConfiguration Macros EvaluateTranspiled: True) є короткостроковим виправленням, щоб вони працювали, як і раніше. Однак зауважте, що це лише тимчасове рішення: цей перемикач зникне після перехідного періоду.

Аналогічно, на старих версіях RoomOS цю зміну можна перевірити без оновлення, встановивши перемикач у положення False.

Примітка: Якщо макрос збережено на пристрої , а перемикач має значення False, і ви пізніше вирішите TURN перемикач назад у положення True, може знадобитися повторне збереження цих макросів у редакторі макросів.

Коли ці зміни набудуть чинності?

Значення за замовчуванням перемикача EvaluateTranspiled було змінено на False, починаючи з RoomOS May 2025 (11.28), що означає, що пристрої перемикатимуться за замовчуванням під час оновлення. У цій же версії за замовчуванням вимкнено крок транспіляції при збереженні макросів через XAPI. Якщо транспилювання потрібне через XAPI, параметр команди transpile має бути явно встановлений на true.

Починаючи з RoomOS у липні 2025 (11.30), діагностика буде показана, коли перемикач встановлено на True. Він все одно працюватиме, як і раніше.

Надалі перемикач буде повністю видалено, і пристрій поводитиметься так, ніби для нього було встановлено значення False. Ми плануємо впровадити цю зміну в листопаді 2025 року. Ця дата може змінюватися, оскільки ми бачимо, скільки наших клієнтів можуть оновити свої макроси, але часова шкала вимірюється місяцями, а не роками. Точні дати будуть опубліковані тут і в примітках до випуску відповідних релізів RoomOS.

Будь-які клієнти, які, незважаючи на всі наші зусилля сповіщати та інформувати про зміни, бачать, що їхні макроси зазнають невдачі, коли зміни постійно діють у RoomOS, можуть використовувати (до) 6-місячного відкладеного оновлення програмного забезпечення, яке надається через Control Hub для пристроїв, зареєстрованих у хмарі, щоб відстрочити зміну.

Навіщо це потрібно? Технічна інформація

Основною рушійною силою цієї зміни є те, що ми оновили наш рушій JavaScript, щоб використовувати QuickJS, який служить сучасним, оновленим середовищем виконання JavaScript для вбудованих систем. Після цього, оскільки це більше не потрібно з сучасним движком JavaScript, ми тепер видаляємо підтримку транспилювання JavaScript. Видалення зайвого кроку транспіляції всього коду скорочує час завантаження при розгортанні та виконанні коду, а також знижує складність платформи.

Перемикач двигуна JavaScript управляється за допомогою макросів xConfiguration QuickJSEngine: Off змінено на On. Ця зміна була впроваджена в RoomOS December 2023 (11.11), і ми плануємо видалити цей перемикач конфігурації на тій же часовій шкалі, що й EvaluateTranspiled.

Ми вносимо ці зміни, щоб переконатися, що RoomOS працює максимально, і що ми можемо допомогти вам масштабувати розгортання розширень JavaScript ефективним і безпечним способом.

Детальніше про макроси читайте на roomos.cisco.com.