pengzhanbo 0fd6cac574
refactor(theme): improve types and flat config (#524)
* refactor(theme): improve types
2025-03-16 02:29:30 +08:00

315 lines
8.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 文章贡献者
icon: simple-icons:contributorcovenant
badge:
type: tip
text: v1.0.0-rc.115 +
createTime: 2024/11/07 16:26:54
permalink: /guide/features/contributors/
---
## 概述
主题支持为文章添加贡献者信息,以便更好的了解您的文章贡献者。
文章贡献者通过 git 提交记录获取。
该功能由 [@vuepress/plugin-git](https://ecosystem.vuejs.press/zh/plugins/development/git.html) 提供支持。
::: warning 注意
该功能由于需要通过 `git log` 命令获取每个 md 文件的提交记录,是一个相对比较耗时的操作,特别是对于大型项目,提交记录数量较多的情况。因此该功能在开发环境中不会启用,仅在生产环境中启用。
但你仍然可以通过设置 `theme.plugins.git``true` 来启用该功能,以便在开发环境中测试。
```ts
import { defineUserConfig } from 'vuepress'
import { plumeTheme } from 'vuepress-theme-plume'
export default defineUserConfig({
theme: plumeTheme({
plugins: { git: true }
})
})
```
:::
## 使用
主题已内置 [@vuepress/plugin-git](https://ecosystem.vuejs.press/zh/plugins/development/git.html) 插件,你无需重新安装即可使用。
在主题配置文件中启用该功能:
```ts title=".vuepress/config.ts"
import { defineUserConfig } from 'vuepress'
import { plumeTheme } from 'vuepress-theme-plume'
export default defineUserConfig({
theme: plumeTheme({
// 默认启用,仅当 plugins.git 为 true 时生效
// 此配置在 plume.config.ts 中无效
contributors: true,
plugins: {
// 如果您在此处直接声明为 true则表示开发环境和生产环境都启用该功能
git: process.env.NODE_ENV === 'production'
}
})
})
```
## 配置
### mode
- 类型:`'inline' | 'block'`
- 默认值:`'inline'`
- 描述:
- `inline`:在文章页底部,与 最后更新时间,并列显示贡献者信息,该模式下仅显示 贡献者名称。
![contributors inline](/images/contributors-inline.png)
- `block`:在文章内容末尾插入贡献者信息,该模式下包含 贡献者名称、贡献者链接、贡献者头像。
(如当前页面内容结尾所示)
在 `block` 模式下,贡献者默认均会显示头像,即使您未填写头像地址。插件会从 `https://gravatar.com/`
根据 邮箱地址或用户名 生成头像地址。
```ts
import { defineUserConfig } from 'vuepress'
import { plumeTheme } from 'vuepress-theme-plume'
export default defineUserConfig({
theme: plumeTheme({
contributors: {
mode: 'block',
},
})
})
```
### info
- 类型:`ContributorInfo[]`
```ts
interface ContributorInfo {
/**
* 贡献者在 Git 托管服务中的用户名
*/
username: string
/**
* 贡献者显示在页面上的名字, 默认为 `username`
*/
name?: string
/**
* 贡献者别名, 由于贡献者可能在本地 git 配置中保存的 用户名与 托管服务 用户名不一致,
* 这时候可以通过别名映射到真实的用户名
*/
alias?: string[] | string
/**
* 贡献者头像地址
* 如果 git 托管服务为 `github`,则可以忽略不填,由插件自动填充
*/
avatar?: string
/**
* 贡献者访问地址
* 如果 git 托管服务为 `github`,则可以忽略不填,由插件自动填充
*/
url?: string
}
```
- 描述:
贡献者信息列表。
用户在本地 git 服务中配置的 用户名和邮箱 可能与 git 托管服务(如 github、gitlab、gitee的用户信息不一致。
可以在此预先配置贡献者信息。
(对于非 github 的其他 git 托管服务,诸如 gitlab、gitee由于不能通过用户名直接获取头像和用户地址请在此
补充完善用户信息。)
::: code-tabs
@tab Github
```ts
import { defineUserConfig } from 'vuepress'
import { plumeTheme } from 'vuepress-theme-plume'
export default defineUserConfig({
theme: plumeTheme({
contributors: {
mode: 'block',
info: [
{
username: 'pengzhanbo', // github username
alias: ['peng_zhan_bo'], // 别名,本地 git 配置中的用户名
}
]
},
})
})
```
@tab Gitlab
```ts
import { defineUserConfig } from 'vuepress'
import { plumeTheme } from 'vuepress-theme-plume'
export default defineUserConfig({
theme: plumeTheme({
contributors: {
mode: 'block',
info: [
{
username: 'pengzhanbo', // gitlab username
alias: ['peng_zhan_bo'], // 别名,本地 git 配置中的用户名
url: 'https://gitlab.com/pengzhanbo',
avatar: 'https://gitlab.com/uploads/-/system/user/avatar/1/avatar.png',
}
]
},
})
})
```
@tab Gitee
```ts
import { defineUserConfig } from 'vuepress'
import { plumeTheme } from 'vuepress-theme-plume'
export default defineUserConfig({
theme: plumeTheme({
contributors: {
mode: 'block',
info: [
{
username: 'pengzhanbo', // gitee username
alias: ['peng_zhan_bo'], // 别名,本地 git 配置中的用户名
url: 'https://gitee.com/pengzhanbo',
avatar: 'https://foruda.gitee.com/avatar/1234455/avatar.png',
}
]
},
})
})
```
@tab Bitbucket
```ts
import { defineUserConfig } from 'vuepress'
import { plumeTheme } from 'vuepress-theme-plume'
export default defineUserConfig({
theme: plumeTheme({
contributors: {
mode: 'block',
info: [
{
username: 'pengzhanbo', // bitbucket username
alias: ['peng_zhan_bo'], // 别名,本地 git 配置中的用户名
url: 'https://bitbucket.org/pengzhanbo',
avatar: 'https://bitbucket.org/pengzhanbo/avatar/1234455/avatar.png',
}
]
},
})
})
```
@tab 其它
```ts
import { defineUserConfig } from 'vuepress'
import { plumeTheme } from 'vuepress-theme-plume'
export default defineUserConfig({
theme: plumeTheme({
contributors: {
mode: 'block',
info: [
{
username: 'pengzhanbo', // username
alias: ['peng_zhan_bo'], // 别名,本地 git 配置中的用户名
url: 'https://your-git.com/pengzhanbo',
avatar: 'https://your-git.com/avatar.png',
}
]
},
})
})
```
:::
### avatar
- 类型:`boolean`
- 默认值:`true`
- 描述:是否显示贡献者头像
### avatarPattern
- 类型:`string`
- 默认值:`'https://github.com/:username.png'`
- 描述:贡献者头像地址模式
`:username` 会被替换为贡献者的 用户名
### transform(contributors)
- 类型:`(contributors: GitContributor[]) => GitContributor[]`
```ts
interface GitContributor {
name: string // 显示的名字
username: string // git 托管服务 username
email: string
commits: number // 贡献者提交次数
avatar?: string
}
```
- 描述:
贡献者转换函数。该函数需要返回新的 贡献者列表。
你可以在此处补充转换逻辑,比如进行排序、去重、或者补全信息等。
## frontmatter
### contributors
- 类型:`boolean | string[]`
- 描述:
是否显示贡献者信息。
如果您的文章来源于第三方, git 提交不能完整列出所有的作者,您可以在此处补充贡献者。
## 注意
该功能要求你的项目在 [Git 仓库](https://git-scm.com/book/en/Git-Basics-Getting-a-Git-Repository) 下,这样它才能从提交历史记录中收集信息。
**在构建站点时,你应该确保所有的提交记录是可以获取到的。**
举例来说, CI 工作流通常会在克隆你的仓库时添加 `--depth 1` 参数来避免拉取全部的提交记录,因此你需要禁用这个功能,以便该插件在 CI 可以中正常使用。
类似于 `github actions` 、`Netlify` 、 `Vercel` 等服务,默认是不会拉取全部的提交记录的。
在 `github actions` 中,可以通过添加 `--depth 1` 参数来使得 `github actions` 可以正确获取到所有的提交记录。
在 `Netlify` 、 `Vercel` 等服务中,处理方法则会相对复杂一些。这时候您可以先在 `github actions` 完成构建后
输出将产物输出到另一个单独的分支,然后在 `Netlify` 或者 `Vercel` 中直接使用该分支进行部署。
::: info
通过主题的 `cli` 工具创建的项目,在选择部署方式为 `github action` 时,构建产物会输出到 `gh_pages` 分支中,
你可以在此基础上完成 `Netlify` 或者 `Vercel` 的部署。
:::