在主题中使用 \u003cscript type='text/discourse-plugin\u003e 或 \u003cscript type='text/x-handlebars'\u003e 已弃用。主题中所有使用这些标签的地方都应根据以下说明进行更新。
常规的 \u003cscript\u003e 和 \u003cscript type='text/javascript'\u003e 不受此更改影响。
时间线
均为大致估计,可能会有变动
-
2025 年 5 月 - 启用控制台弃用消息
-
2025 年 7 月 - 启用管理员警告横幅
-
2025 年 9 月下旬 - 移除该功能
转换 \u003cscript type='text/x-handlebars'\u003e
使用此方法引入的模板应移至专用的 .hbs 文件,或重构为 gjs 文件。
若要保留为 HBS,连接器模板可放置在:
{theme}/javascripts/discourse/connectors/{outlet-name}/{connector-name}.hbs
组件模板可放置在:
{theme}/javascripts/discourse/components/{component-name}.hbs
要使用现代 .gjs 格式构建连接器和组件,请参阅主题开发者教程的本章:
转换 \u003cscript type='text/discourse-plugin'\u003e
这些标签内的代码可以迁移到专用的 JavaScript 文件。
如果您通过管理面板界面开发主题,请将代码从 \u003cscript\u003e 中复制出来,并移至 JS 选项卡(显示“// your code here”的地方)。
如果您在本地开发主题,请在以下位置创建一个新文件:
{theme}/javascripts/discourse/api-initializers/init-theme.js
然后添加此包装器,并将您的代码放在指定位置:
import { apiInitializer } from "discourse/lib/api";
export default apiInitializer((api) => {
// Your code here
});
在脚本标签中,导入其他 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 初始化程序的更多信息:


