# 配置参考
# Vssue 配置
Vssue 配置 (类型 VssueOptions)在调用 Vue.use() 时进行设置:
import Vue from 'vue';
import Vssue from 'vssue';
Vue.use(Vssue, {
// Vssue 配置
});
# api
类型:
VssueAPI.Constructor详细:
VssueAPI 类的构造函数,而 VssueAPI 类实现了
VssueAPI.Instance接口。Vssue 会使用它创建 VssueAPI 实例,然后通过 VssueAPI 实例向平台发出请求。
VssueAPI 包的命名格式为
@vssue/api-${platform}-${version},对应不同平台的不同 API 版本。查看 支持的代码托管平台 了解目前提供的 VssueAPI 包。
示例:
import Vue from 'vue'; import Vssue from 'vssue'; import GithubV3 from '@vssue/api-github-v3'; Vue.use(Vssue, { api: GithubV3, // 其它 Vssue 配置 });提示
实际上,平台本身对于 Vssue 来说是“不透明”的。Vssue 只是通过 API 实例来加载评论,并不关心具体的平台是什么、使用的是哪个版本的 API。Vssue 就是通过这种方法来支持多个平台的。
所以通过创建新的 API 包,很容易支持新的平台和新的 API 版本。
# owner
类型:
string详细:
用来存储 Issue 和评论的仓库的拥有者的名称。可能是一个用户,也可能是一个组织(Github Organization / Gitlab Group / Bitbucket Team)
Vssue 将通过
owner和repo在平台上定位这个仓库。参考: repo
# repo
类型:
string详细:
用来存储 Issue 和评论的仓库的名称。
Vssue 将通过
owner和repo在平台上定位这个仓库。参考: owner
提示
仓库 URL 的常见模式是 `${baseURL}/${owner}/${repo}`:
- Github:
https://github.com/${owner}/${repo} - Gitlab:
https://gitlab.com/${owner}/${repo} - Bitbucket:
https://bitbucket.org/${owner}/${repo} - Gitee:
https://gitee.com/${owner}/${repo} - Gitea:
https://gitea.com/${owner}/${repo}
# clientId
类型:
string详细:
在 OAuth2 spec 中介绍的
client_id。它是由平台分配的 client 标识符。你在创建 OAuth App 之后就可以得到它。
Vssue 将使用
clientId来获取用户的 access token。参考:
# clientSecret
类型:
string默认值:
undefined详细:
在 OAuth2 spec 中介绍的
client_secret。它是由平台生成的 client 密钥。你在创建 OAuth App 之后就可以得到它。
在和某些平台一起使用时, Vssue 将使用
clientId和clientSecret来获取用户的 access token。提示
一些平台(如 Bitbucket 和 GitLab)支持 Implicit Grant,所以在使用这些平台时不需要
clientSecret。然而,有一些平台(如 GitHub, Gitee 和 Gitea)不支持它,所以在使用这些平台时
clientSecret是必须的。参考:
# baseURL
类型:
string默认值:
undefined(根据不同平台变化)详细:
平台的 base URL。
对于我们支持的平台,默认值为:
- Github 是
'https://github.com' - Gitlab 是
'https://gitlab.com' - Bitbucket 是
'https://bitbucket.org' - Gitee 是
'https://gitee.com' - Gitea 是
'https://gitea.com'
注意
只有在你要使用 自行搭建的 平台时才需要设置这个选项。(比如 GitLab Community / Enterprise Edition 或 GitHub Enterprise Server)
- Github 是
参考:
# state
类型:
string默认值:
'Vssue'详细:
在 OAuth2 spec 中介绍的
state。Vssue 将会在重定向到平台认证界面时发送它,并在平台认证返回后检查它是否正确。
它是被设计用来避免 CSRF 的,但是由于我们所有东西都在静态页面上,所以它没有太大作用。忽略这个选项,或者随便设置成什么值都行。
# labels
类型:
Array<string>默认值:
['Vssue']详细:
用来设置 Vssue 使用的 Issue 的 labels (标签)。
Vssue 只会请求拥有对应标签的 Issue,忽略其他的 Issue。Vssue 通过
title和labels来确定用来存储评论的对应 Issue。传入多个字符串可以设置多个标签,只有同时满足这些标签的 Issue 才会被 Vssue 请求。提示
Bitbucket 目前不支持 Issue 标签功能,所以如果你使用 Bitbucket 的话,这个配置将会被忽略。
Github 支持在标签名称中加入 emoji,如
[':heart:Vssue', ':mailbox:Comments']。参考: title
# prefix
类型:
string默认值:
'[Vssue]'详细:
Issue 标题的前缀。用于生成存储评论的对应 Issue 的实际标题。
举例来说,如果
prefix是'[Vssue]',title是'Vssue Demo',那么 Issue 的实际标题就是'[Vssue]Vssue Demo'。如果
title的类型是Function,这个配置将会被忽略。参考: title
# admins
类型:
Array<string>默认值:
[]详细:
拥有 admin 权限的用户数组。
owner始终视为拥有 admin 权限。拥有 admin 权限的用户可以删除所有用户的评论,而其他用户只能删除自己的评论。
只有
admins才能在存储评论的 Issue 不存在时自动创建它。提示
在
owner是一个组织而不是用户时,可以将你的用户名添加进admins来自动创建对应 Issue。参考: owner
# perPage
类型:
number默认值:
10详细:
默认每页显示的评论数。
# locale
类型:
string默认值:
undefined详细:
使用的语言。
不设置该选项时,Vssue 会使用
window.navigator.languages中的语言,如果其中没有 Vssue 支持的语言则会默认使用'en'。提示
Vssue 使用 vue-i18n 实现国际化,但是并不会影响你的 Vue 应用的其他部分。 如果你在项目中已经使用了 vue-i18n,也不会对 Vssue 造成影响。
语言包在 src/i18n/langs 目录下。目前我们支持:
'en'('en-US')'zh'('zh-CN','zh-TW')'pt'('pt-BR')'ja'('ja-JP')'he'('he-IL')'ko'('ko-KR')'fr'('fr-FR')
欢迎贡献代码帮助 Vssue 支持更多语言。
# proxy
类型:
string | ((url: string) => string)默认值:
url => `https://cors-anywhere.azm.workers.dev/${url}`详细:
某些平台(如 GitHub, Gitee 和 Gitea)不支持 Implicit Grant,所以我们必须通过请求平台的 API 来获取 Access Token。
然而,平台的 Access Token API 不支持 CORS (详见 GitHub 的相关 Issue)。由于 Vssue 是一个纯前端插件,我们必须要通过代理来请求 Access Token。
默认情况下,我们使用一个开源的 CORS 代理服务 cors-anywhere。
如果你希望使用自己的代理,就需要设置这个选项。
如果你使用的平台不需要设置
clientSecret,那么该选项会被忽略。示例:
proxy: url => `https://your.cors.porxy?target=${url}`;参考:
# issueContent
类型:
((param: { options: Vssue.Options, url: string }) => string | Promise<string>)默认值:
({ url }) => url详细:
Vssue 自动创建 Issue 时使用的内容。
Vssue 将使用该函数的返回值作为 Issue 的内容。
参数包含两个属性:
options是 Vssue 的 options。url是当前页面的 URL ,是 Vssue 生成 Issue 时默认使用的内容。
示例:
issueContent: ({ url }) => `这个 Issue 由 Vssue 自动创建,用来存储该页面的评论:${url}`;提示
issueContent只用来在对应 Issue 不存在时新建 Issue。如果对应的 Issue 已经存在,Vssue 不会更新 Issue 的内容。
# autoCreateIssue
类型:
boolean默认值:
false详细:
如果
autoCreateIssue设置为true,在对应的 Issue 不存在时,Vssue 会自动尝试为你创建 Issue。注意,若你当前没有登录,则 Vssue 会自动跳转到平台的认证页面。如果
autoCreateIssue设置为false,你必须手动创建 Issue。
# 组件 Props
Vssue 组件 Props 是在使用 <Vssue /> 组件时设置的:
<!-- 使用 title -->
<Vssue title="Hello, Vssue!" :options="{ locale: 'zh' }" />
<!-- 或:使用 issueId -->
<Vssue :issue-id="1" :options="{ locale: 'zh' }" />
# title
类型:
string | ((options: VssueOptions) => string)是否必须:
false默认值:
options => `${options.prefix}${document.title}`详细:
当前 Vssue 组件使用的 Issue 的标题。
- 如果类型是
string,实际标题是`${prefix}${title}`。 - 如果类型是
Function,实际标题是函数的返回值。注意,这个函数的第一个参数是 Vssue 的 options,你可以通过它们来生成实际的标题。
提示
虽然
title有默认值,但是我们建议你在 SPA 中明确设置title的值,否则在 SPA 的不同页面间切换时,Vue.js 可能会只使用同一个 Vssue 组件实例。当然,你也可以使用 key 来帮助 Vue.js 辨识组件。注意
Vssue 在尝试加载评论时,将会根据
labels和title来请求对应的 Issue。如果这个 Issue 不存在,将会使用title、issueContent和labels来创建一个新的 Issue。换句话说,
labels和title是存储评论的对应 Issue 的标识符。所以请确保不同页面的 Vssue 使用不同的
title。拥有相同title的 Vssue 会对应到同一个 Issue,也就会有同样的评论。- 如果类型是
参考:
# issueId
类型:
string | number是否必须:
false默认值:
null详细:
当前 Vssue 组件使用的 Issue 的 ID。
如果设置了
issueId,下列参数将会被忽略:- Options:
labels,prefix,issueContent和autoCreateIssue - Props:
title
注意
如果设置了
issueId,Vssue 将会直接使用它来确定要使用哪个 Issue,而不是根据labels和title来查找对应的 Issue。这会加快 Vssue 的初始化过程。但是在这种情况下,你必须要 手动创建 Issue。如果对应的 Issue 不存在,Vssue 不会尝试为你创建一个新的 Issue。
- Options:
# options
类型:
Object(Partial<VssueOptions>)是否必须:
false默认值:
{}详细:
在 prop
options中设置的属性,会覆盖通过Vue.use()设置的属性。它可以接收VssueOptions中的所有配置。你可以把通过
Vue.use()设置的配置当作 Vssue 的 全局 / 默认 配置,把通过 propoptions设置的配置当作 局部 配置。参考: Vssue 配置