什么是 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 路由提供数据查询接口。