Грядущий EOL для системы рендеринга виджетов

Всем привет! В рамках завершающего этапа нашей работы по отказу от устаревшей системы рендеринга «виджетов» мы объявляем о прекращении поддержки виджетов в Discourse и вскоре полностью отключим их.

Сроки

Это предварительные оценки, которые могут быть изменены

Июль 2025:

  • :white_check_mark: Добавлены предупреждения о устаревании в ядро и экспериментальная настройка сайта для их отключения
  • :white_check_mark: Опубликовано объявление на Meta

Август 2025

  • :white_check_mark: Официальные плагины и компоненты тем обновлены для использования компонентов Glimmer.
  • :white_check_mark: Meta запущена с отключенными виджетами.
  • :white_check_mark: Включены сообщения об устаревании с предупреждающим баннером для администраторов.

3 квартал 2025:

  • Плагины и темы сторонних разработчиков должны быть обновлены.

4 квартал 2025:

  • :white_check_mark: Система рендеринга виджетов будет отключена по умолчанию с помощью параметра deactivate_widgets_rendering: true. Предусмотрен короткий период, в течение которого её можно будет вручную включить обратно.

  • :white_check_mark: Удалён устаревший код и полностью отключена система рендеринга виджетов

:police_car_light: Несовместимые плагины и темы после этого перестанут работать корректно.

Что это значит для вас?

Если какие-либо ваши плагины или темы используют API «виджетов», вам необходимо обновить их для использования более новых API или компонентов Glimmer до окончания срока в 4 квартале 2025 года.

У меня установлены кастомные плагины или темы. Нужно ли их обновлять?

Вам потребуется обновить плагины или темы, если они используют что-либо из следующего:

  • createWidget
  • decorateWidget, changeWidgetSetting, reopenWidget или attachWidgetAction
  • Компонент MountWidget

:bulb: Полезный совет: Если у вас есть расширения, использующие эти кастомизации, в консоли появится предупреждение, указывающее, какой плагин или компонент требует обновления.

:warning: Важно: Если вы используете более одной темы на вашем экземпляре, обязательно проверьте все из них, так как предупреждения будут отображаться только для активных плагинов и используемых в данный момент тем и компонентов тем.

Идентификатор устаревания: discourse.widgets-end-of-life

Как это связано с недавней модернизацией потока постов?

Поток постов был последней крупной частью Discourse, которая всё ещё использовала систему рендеринга виджетов. С её модернизацией мы можем перейти к полному отказу от системы виджетов. Подробнее об этих изменениях читайте в руководстве по обновлению.

Как выполнить обновление?

Если вы используете сторонний плагин или тему: Проверьте, выпустил ли автор обновлённую версию, совместимую с новой системой.

Если вы автор плагина/темы:

  • Замените свои кастомные виджеты на компоненты Glimmer
  • Используйте коннекторы plugin-outlet для их вставки в интерфейс

За дополнительной информацией по внесению этих изменений обращайтесь к нашим руководствам для разработчиков.

При следующем обновлении вашей установки Discourse система рендеринга виджетов будет отключена, и любые кастомизации на основе виджетов больше отображаться не будут.

Пока на несовместимых сайтах администратор может снова включить старое поведение, изменив значения следующего параметра:

  • deactivate_widgets_rendering

Это заключительный этап перед удалением старого кода из кодовой базы Discourse, которое, как ожидается, произойдет примерно через месяц. После этого повторно включить виджеты уже не будет возможно.

PR, удаляющий систему виджетов из Discourse, был слит вчера.

Может, глупый вопрос, но, по-вашему, возможно ли, чтобы Discourse предоставлял .md-файл с руководством/подсказками, который можно было бы использовать в выбранном CLI-инструменте для помощи в миграции компонента плагина?

Просто мысль :smiley:

Мы постарались предоставить инструкции по миграции для наиболее распространённых паттернов кастомизации, таких как те, которые изменяли post-stream.

Написать более подробное руководство сложнее, поскольку с помощью виджетов можно реализовать практически что угодно, поэтому оставшиеся элементы кастомизации необходимо конвертировать в компоненты в индивидуальном порядке.

Я слежу за этими темами и постараемся отвечать на вопросы, опубликованные здесь, чтобы помочь тем, кто всё ещё нуждается в миграции.

Я кратко посмотрел код, который, судя по всему, вызывает предупреждение об устаревании на вашем форуме (через консоль браузера), и, похоже, это следующая строка:

const { iconNode } = require("discourse-common/lib/icon-library");
let iconsjira = iconNode('icons-jira');

iconNode использовался только виджетами, а теперь это функция-заглушка (noop). В вашем коде переменная, похоже, не используется, поэтому должно быть безопасно просто удалить эти строки.

Дайте знать, если понадобится ещё помощь.