← Back
Intermediate 2 min read

创建你的第一个 EmDash 插件

手把手教你开发一个 EmDash 插件,从 definePlugin 脚手架到 hooks、存储、管理界面和发布。

什么是 EmDash 插件

EmDash 插件是通过 definePlugin API 创建的扩展包,可以响应内容生命周期事件(Hooks)、添加管理后台页面、注册 API 路由、扩展 Portable Text 编辑器的块类型,以及使用独立的存储空间保存插件数据。

搭建开发环境

创建一个新目录作为插件项目,初始化 package.json 并安装 emdash 作为开发依赖。建议在一个现有的 EmDash 站点中以本地依赖方式引用插件,这样可以实时测试。插件的入口文件导出一个调用 definePlugin 的工厂函数。

使用 Hooks 响应事件

Hooks 是插件的核心能力。通过注册 beforePublish、afterPublish、beforeDelete 等钩子函数,你可以在内容生命周期的关键节点执行自定义逻辑。例如在发布前校验内容、在发布后触发通知、在删除前备份数据等。

插件存储

每个插件拥有独立的键值存储空间,通过 context.storage API 进行读写。存储的数据持久化在 EmDash 数据库中。适合保存插件配置、统计数据、缓存结果等。注意存储的值会被 JSON 序列化,不能存储函数或类实例。

添加管理页面

插件可以在管理后台注册自定义页面,显示在左侧导航中。管理页面使用 Preact 编写,可以调用插件的 API 路由获取和修改数据。EmDash 提供了一组管理后台 UI 组件(按钮、表格、表单等)确保视觉风格一致。

注册 API 路由

通过 definePlugin 的 routes 选项注册自定义 API 路由。路由会挂载在 /_emdash/api/plugins/{pluginId}/ 路径下。支持 GET、POST、PUT、DELETE 等 HTTP 方法。路由处理函数接收标准的 Request 对象和插件上下文。

测试与发布

开发完成后在本地站点中充分测试所有功能。确保插件在不同数据库后端(SQLite 和 LibSQL)下都能正常工作。发布到 npm 时,包名建议使用 emdash-plugin- 前缀或 @yourorg/emdash-plugin- 作用域命名。在 package.json 中声明 emdash 为 peerDependency。

完整示例

本教程的完整代码示例可在 GitHub 的 emdash-cms/plugin-example 仓库中找到。包括一个「字数统计」插件的完整实现:统计每篇文章的字数、在管理后台展示统计图表、通过 API 路由提供数据查询接口。