Использование <script type='text/discourse-plugin'> или <script type='text/x-handlebars'> в темах теперь устарело. Любое использование этих тегов в темах следует обновить в соответствии с инструкциями ниже.
Обычные <script> и <script type='text/javascript'> не затронуты этим изменением.
Сроки
Это приблизительные оценки, они могут быть изменены
-
Май 2025 — включены сообщения об устаревании в консоли
-
Июль 2025 — включены предупреждающие баннеры в админ-панели
-
Конец сентября 2025Март 2026 — удаление функциональности
Конвертация <script type='text/x-handlebars'>
Шаблоны, созданные этим способом, следует перенести в отдельные файлы .hbs или переписать в файлы gjs.
Чтобы оставить их в формате HBS, шаблоны коннекторов можно разместить в:
{theme}/javascripts/discourse/connectors/{outlet-name}/{connector-name}.hbs
а шаблоны компонентов — в:
{theme}/javascripts/discourse/components/{component-name}.hbs
С марта 2026 года файлы
.hbsтакже считаются устаревшими. После выполнения этой конвертации перейдите к инструкциям по ссылке: Deprecating .hbs file extension in themes and plugins
Чтобы создавать коннекторы и компоненты в современном формате .gjs, ознакомьтесь с этой главой руководства для разработчиков тем:
Конвертация <script type='text/discourse-plugin'>
Код внутри этих тегов можно перенести в отдельный JavaScript-файл.
Если вы разрабатываете тему через интерфейс админ-панели, скопируйте код из тега <script> и переместите его во вкладку JS (там, где написано // your code here).
Если вы разрабатываете тему локально, создайте новый файл по пути:
{theme}/javascripts/discourse/api-initializers/init-theme.js
затем добавьте этот обёрточный код и поместите свой код в указанное место:
import { apiInitializer } from "discourse/lib/api";
export default apiInitializer((api) => {
// Ваш код здесь
});
В тегах скриптов единственным способом импорта других JS-модулей был синтаксис require(). Хотя это всё ещё будет работать в файле .js, скоро этот способ также станет устаревшим, поэтому сейчас самое время перейти на современные импорты ES6. Например:
- const I18n = require("discourse-i18n").default;
+ import I18n from "discourse-i18n";
- const { h } = require("virtual-dom");
+ import { h } from "virtual-dom";
Дополнительная информация об инициализаторах JS:


