使用 TypeScript 编写插件
前置条件:NodeJS>=18
此教程将以编写剪贴板插件为例进行说明。
Step1 初始化项目
使用 hydrooj addon create
快速在 /root/addon
下初始化一个插件或是在一个空文件夹中运行 yarn init
并按照提示填写相关信息。
可选:在本机环境编写插件
有时我们希望使用本机的 IDE 编写插件上传到服务器(我们也推荐这么做,编辑器提供的代码补全可以很大程度简化开发流程),可以进行如下操作:
- 在本机安装 NodeJS 和 yarn 。
- 参照步骤 1 使用
yarn init
创建一个项目。 - 使用 VSCode 打开插件文件夹。
- 使用
yarn add hydrooj -D
安装相关开发组件。 - 参照下文进行插件开发工作
- 将本地的文件夹上传至服务器,并使用
hydrooj addon add 插件绝对路径
启用上传的插件。
Step2 准备编写组件
分析:剪贴板组件需要以下功能:
- 与数据库交互来存储/检索相应文档。
- 提供 /paste/create 路由以创建新文档。
- 提供 /paste/show/:ID 来查看已创建的文档。
- 根据用户ID进行鉴权,允许将文档设置为私密以防止他人查看。
在路由中定义所有的函数应均为异步函数,支持的函数有:prepare, get, post, post[Operation], cleanup
具体流程如下:
如果在 this.response.template 指定模板则渲染,否则直接返回 this.response.body 中的内容。
- 在表单提交时的 operation 字段使用下划线,函数名使用驼峰命名。
如 <input type="hidden" name="operation" value="confirm_delete">
对应 postConfirmDelete
函数。
应当提供 apply
函数,并与定义的 Handler 一同挂载到 global.Hydro.handler[模块名]
位置。
apply
函数将在初始化阶段被调用。
Step3 index.ts
Step4 template
模板采用 nunjucks 语法。放置于 templates/
文件夹下。
会在请求结束时根据 response.template
的值选择模板,并使用 response.body
的值进行渲染,存入 response.body
中。
若 response.template
为空或 request.headers['accept'] == 'application/json'
,则跳过渲染步骤。
Step5 locale
用于提供多国翻译。格式与 Hydro 的 locale 文件夹格式相同。