在 Discourse 中构建插件其实非常简单,一旦你了解了一些特殊之处。本帖的目标是创建一个插件骨架,并带你了解基础知识。
开发环境
请确保你的电脑上有一个正在运行的 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: A super simple plugin to demonstrate how plugins work
# 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("alert boxes are annoying!");
},
};
现在,如果你重启本地服务器,你应该会在屏幕上看到 “alert boxes are annoying!”。(如果没有,请参见上面的“我的更改没有被检测到”标题)。
让我们逐步了解这是如何工作的:
-
放置在
assets/javascripts/discourse/initializers中的 JavaScript 文件会在 Discourse 应用程序加载时自动执行。 -
这个特定的文件
export了一个对象,该对象有一个name和一个initialize函数。 -
name必须是唯一的,所以我只是把它命名为alert。 -
initialize()函数在应用程序加载时被调用。在我们的情况下,它只是执行我们的alert()代码。
你现在是一名正式的 Discourse 插件开发者了!
系列文章更多部分
第 1 部分:本主题
第 2 部分:插件出口 (Plugin Outlets)
第 3 部分:站点设置
第 4 部分:Git 设置
第 5 部分:管理界面
第 6 部分:验收测试
第 7 部分:发布你的插件
本文档受版本控制 - 建议在 github 上提出更改。

