在 Discourse 中构建插件其实非常简单,只要了解一些 quirks 即可。本文的目标是创建一个插件骨架,并为您介绍基础知识。
您的开发环境
请确保您的计算机上已运行 Discourse 开发环境。建议您使用 相应的设置指南,完成后返回继续阅读。
plugin.rb
使用 GitHub - discourse/discourse-plugin-skeleton: Template for Discourse plugins · GitHub 在您的插件目录中创建一个完整的 Discourse 插件骨架
该骨架现已打包在 Discourse 核心中,运行
rake plugin:create[plugin-name]即可使用该骨架创建插件。
当 Discourse 启动时,它会在 plugins 目录中查找包含 plugin.rb 文件的子目录。plugin.rb 文件有两个用途:首先,它是插件的清单,包含插件所需的信息,例如名称、联系信息和描述;其次,它用于初始化运行插件所需的任何 Ruby 代码。
在本例中,我们不会添加任何 Ruby 代码,但仍需要 plugin.rb 文件。让我们创建一个名为 basic-plugin 的目录,并在其中创建 plugin.rb 文件,内容如下:
basic-plugin/plugin.rb
# name: basic-plugin
# about: 一个超级简单的插件,用于演示插件的工作原理
# version: 0.0.1
# authors: Awesome Plugin Developer
# url: https://github.com/yourusername/basic-plugin
创建此文件后,请重启本地服务器,插件即应被加载。
一个重要陷阱!
如果您熟悉常规的 Rails 开发,可能会注意到插件在热重载方面不太方便。通常,当您对插件进行修改时,应按 Ctrl+c 停止服务器,然后使用 bin/dev 重新启动它。
我的更改未被识别!
有时缓存未完全清除,尤其是在创建新文件或删除旧文件时。要解决此问题,请删除 tmp 文件夹并重新启动 Rails。在 Mac 上,您可以使用一条命令完成:rm -rf tmp; bin/dev。
检查插件是否已加载
重启本地服务器后,访问 URL /admin/plugins(请确保您已 以管理员账户登录,因为只有管理员才能查看插件注册表)。
如果一切正常,您应该在列表中看到您的插件:
恭喜,您刚刚创建了第一个插件!
添加一些 JavaScript
目前您的插件没有任何功能。让我们添加一个 JavaScript 文件,当 Discourse 加载时弹出警告框。这对任何用户来说都非常烦人,因此不建议作为实际插件使用,但它可以展示如何将 JavaScript 插入到正在运行的应用程序中。
创建以下文件:
plugins/basic-plugin/assets/javascripts/discourse/initializers/alert.js
export default {
name: "alert",
initialize() {
alert("警告框很烦人!");
},
};
现在,如果您重启本地服务器,屏幕上应该会出现“警告框很烦人!”的提示。(如果未出现,请参见上文“我的更改未被识别”部分)。
让我们逐步了解其工作原理:
-
放置在
assets/javascripts/discourse/initializers中的 JavaScript 文件会在 Discourse 应用程序加载时自动执行。 -
该特定文件
export了一个对象,其中包含一个name和一个initialize函数。 -
name必须是唯一的,因此我将其命名为alert。 -
initialize()函数在应用程序加载时被调用。在本例中,它仅执行我们的alert()代码。
您现在是一名正式的 Discourse 插件开发者!
系列更多内容
第 1 部分:本文
第 2 部分:插件出口
第 3 部分:站点设置
第 4 部分:git 设置
第 5 部分:管理界面
第 6 部分:验收测试
第 7 部分:发布您的插件
本文档已进行版本控制——请在 GitHub 上提出修改建议。



