Skip to content

插件开发

使用 Vite 开发

我们提供了 Vite 的集成插件,使用 Vite 开发能够开箱即用地构建 Artalk 插件,简化 Vite 配置。

参考文档:@artalk/plugin-kit

同时,我们提供了一个模版代码仓库,你可以直接 fork 来开发插件:artalk-plugin-sample

通过 Vite 结合前端生态,你可以任选你喜欢的技术栈,如 Vue、React、Svelte、SolidJS 等框架开发 Artalk 插件。

Artalk.use

使用 Artalk.use 来扩展 Artalk。

js
import Artalk from 'artalk'

Artalk.use((ctx) => {
  ctx.on('list-loaded', () => {
    console.log('评论列表加载完毕')
    ctx.getCommentNodes().forEach((node) => {
      node.getEl().style.background = 'red'
    })
  })
})

Artalk.use((ctx) => {
  let el = null

  ctx.on('mounted', () => {
    el = document.createElement('div')
    document.body.appendChild(el)
    console.log('Artalk 实例被挂载')
  })

  ctx.on('unmounted', () => {
    el.remove()
    console.log('Artalk 实例被销毁')
  })
})

const artalk = Artalk.init({ ... })

请注意:

  • Artalk.use 必须在 Artalk.init 之前调用才生效。
  • 请勿依赖插件的加载顺序,请监听事件来执行插件逻辑。
  • 当所有的插件加载完毕后,会触发 created 事件。
  • 当插件和配置加载完毕后,会触发 mounted 事件。
  • 当 Artalk 实例被销毁时,会触发 unmounted 事件。
  • 当配置发生变化时,会触发 updated 事件。

在 use 函数中,你可以通过 ctx 来访问 Artalk 的 Context 对象。

插件可配置选项

在 TypeScript 中,你可以通过 ArtalkPlugin<T> 来定义一个带选项的插件类型。

ts
export interface DemoPluginOptions {
  foo?: string
}

export const ArtalkDemoPlugin: ArtalkPlugin<DemoPluginOptions> = (ctx, options = {}) => {
  console.log(options.foo)
}

在执行 Artalk.use 时,传入选项:

ts
import { ArtalkDemoPlugin } from 'artalk-plugin-demo'

Artalk.use(ArtalkDemoPlugin, { foo: 'bar' })

ContextAPI

Context 对象包含了 Artalk 的上下文信息。

成员说明
ctx.getEl获取容器元素
ctx.getConf获取配置
ctx.updateConf更新配置
ctx.watchConf监听配置
ctx.setDarkMode设置夜间模式
ctx.getApi获取 API 客户端对象
----
ctx.fetch获取评论数据
ctx.reload重载评论列表
ctx.getComments获取所有评论数据对象
ctx.getCommentNodes获取所有评论节点对象
----
ctx.on添加事件监听
ctx.off解除事件监听
ctx.trigger触发事件
----
ctx.get获取依赖
ctx.inject注入依赖

WARNING

Context API 目前仍不稳定,开发可能会有变动,升级请关注 CHANGELOG。

参考:@artalk/src/types/context.ts

Artalk 包含完整的 TypeScript 类型定义,你可以通过编辑器的自动补全来查看 API。

示例插件

以下为 Artalk 官方维护的外置插件列表:

插件说明
artalk-plugin-sample示例插件
@artalk/plugin-katexLaTeX 公式插件
@artalk/plugin-authAuth 插件 (SolidJS)
@artalk/plugin-lightbox图片灯箱基础插件

同时 Artalk 内部也有很多插件的实现,你可以参考源码来开发插件:

@ArtalkJS/Artalk - src/plugins

后端插件开发

【TODO】