Skip to content

评论配置

comment

评论配置,目前内置 giscustwikoowalineartalk 四种评论插件。

支持在文章页的 frontmatter 配置 comment.[key]

提示

支持每个文章页配置不同的在评论区提供者 provider

ts
const tkConfig = tkThemeConfig({
  comment: {
    provider: "giscus", // 评论区提供者
    // 评论区配置项,根据 provider 不同而不同,具体看对应官网的使用介绍
    options: {
      // twikoo 配置,官网:https://twikoo.js.org/
      // envId: "your envId",
      // link: "https://cdn.jsdelivr.net/npm/twikoo@1.6.41/dist/twikoo.min.js",

      // waline 配置,官网:https://waline.js.org/
      // serverURL: "your serverURL",
      // jsLink: "https://unpkg.com/@waline/client@v3/dist/waline.js",
      // cssLink: "https://unpkg.com/@waline/client@v3/dist/waline.css",

      // giscus 配置,官网:https://giscus.app/zh-CN
      repo: "your repo",
      repoId: "your repoId",
      category: "your category",
      categoryId: "your categoryId",

      // artalk 配置,官网:https://artalk.js.org/
      // server: "your server",
      // site: "site",
    },
  },
});
yaml
---
tk:
  comment:
    provider: giscus
    options:
      repo: your repo
      repoId: your repoId
      category: your category
      categoryId: your categoryId
---
ts
interface TkThemeConfig {
  /**
   * 评论配置
   */
  comment?:
    | CommentConfig<"twikoo">
    | CommentConfig<"waline">
    | CommentConfig<"giscus">
    | CommentConfig<"artalk">
    | CommentConfig<"render">;
}

type CommentConfig<T extends keyof CommentProvider = "twikoo" | "waline" | "giscus" | "artalk" | "render"> = {
  /**
   * 评论区提供者
   * twikoo 官网:https://twikoo.js.org/
   * waline 官网:https://waline.js.org/
   * giscus 官网:https://giscus.app/zh-CN
   * artalk 官网:https://artalk.js.org/
   * render 需要自定义评论区组件
   */
  provider: T;
  /**
   * 评论区配置项,根据 provider 不同而不同,具体看对应官网的使用介绍
   */
  options?: CommentProvider[T];
  /**
   * 自定义评论区组件,如果 provider 不满足,则可以自定义组件,返回一个 VNode,比如一个 vue 组件。当自定义组件时,请将 provider 设为 render
   *
   * @remark 例:{ provider: "render", render: () => <MyCommentVueComponent /> }
   */
  render?: () => VNode;
};

export type CommentProvider = {
  /**
   * twikoo 评论区配置项
   */
  twikoo: {
    /**
     * 官网其他配置项
     */
    [key: string]: any;
    envId: string;
    /**
     * twikoo.js 在线链接
     * @default 'https://cdn.jsdelivr.net/npm/twikoo@{version}/dist/twikoo.min.js'
     */
    link?: string;
    /**
     * twikoo 版本号,不定期更新为最新版
     *
     * @default '1.6.41'
     */
    version?: string;
    /**
     * 页面渲染后多少毫秒开始渲染 twikoo,如果设置太短,可能获取的 DOM 还没加载完成
     *
     * @default 700 (0.7秒)
     */
    timeout?: number;
    /**
     * katex 配置项,如果设置,则加载 katex
     */
    katex?: {
      /**
       * katex 的 css、core、render 的在线链接
       */
      cssLink: string;
      coreJsLink: string;
      renderJsLink: string;
      /**
       * katex 的 css、core、render 的 integrity
       */
      cssIntegrity?: string;
      coreJsIntegrity?: string;
      renderJsIntegrity?: string;
    };
  };
  /**
   * waline 评论区配置项
   */
  waline: {
    /**
     * 官网其他配置项
     */
    [key: string]: any;
    /**
     * waline 后台服务器地址
     */
    serverURL: string;
    /**
     * waline.js 在线链接,在线链接和依赖二选一,依赖安装为:`pnpm install @waline/client`。如果两个都设置,则优先使用 jsLink
     */
    jsLink?: string;
    /**
     * waline.css 在线链接,在线链接和依赖二选一,和 jsLink 搭配使用。如果安装了依赖则不需要传入,如果两个都设置,则优先使用 cssLink
     */
    cssLink?: string;
    /**
     * waline.css 的 integrity
     */
    cssIntegrity?: string;
    /**
     * 暗黑模式,具体使用请看 waline 官网
     *
     * @default "html[class='dark']"
     */
    dark?: string;
  };
  /**
   * giscus 评论区配置项
   */
  giscus: {
    [key: string]: any;
    repo: `${string}/${string}`;
    repoId: string;
    category: string;
    categoryId: string;
    mapping?: "url" | "title" | "og:title" | "specific" | "number" | "pathname";
    strict?: "0" | "1";
    reactionsEnabled?: "0" | "1";
    emitMetadata?: "0" | "1";
    inputPosition?: "top" | "bottom";
    lang?: string;
    theme?: string;
    loading?: "lazy" | "eager";
    /**
     * 是否使用在线链接,如果不打算安装依赖,则设为 true
     *
     * @default false
     */
    useOnline?: boolean;
    /**
     * giscus.js 在线链接,useOnline 为 false 时生效
     *
     * @default 'https://giscus.app/client.js'
     */
    link?: string;
    /**
     * giscus.js 的 integrity
     */
    integrity?: string;
  };
  /**
   * artalk 评论区配置项
   */
  artalk: {
    [key: string]: any;
    /**
     * artalk 后台服务器地址
     */
    server: string;
    /**
     * artalk 站点名称
     */
    site: string;
  };
  /**
   * 自定义评论组件
   */
  render: Record<string, any>;
};

如果这四个评论区提供者都不符合需求,可以自己实现评论区,然后传入进来。

ts
import MyCommentComponent from "./components/MyCommentComponent.vue";

const tkConfig = tkThemeConfig({
  comment: {
    provider: "render",
    render: MyCommentComponent,
  },
});