# 为 BetterAuth 做贡献 (/docs/reference/contributing)

BetterAuth 贡献指南



感谢你对为 Better Auth 贡献代码的兴趣！本指南是为 Better Auth 贡献代码的简明指南。

## 入门 [#入门]

在开始之前，这里有一些重要资源：

* 查看我们的现有 <Link href="https://github.com/better-auth/better-auth/issues">问题</Link> 和 <Link href="https://github.com/better-auth/better-auth/pulls">拉取请求</Link>
* 在 <Link href="https://discord.gg/better-auth">Discord</Link> 中参与社区讨论

开始开发前：

<Callout type="warn">
  请确保你已安装 <Link href="https://nodejs.org/en/download">Node.JS</Link>，建议使用 LTS 版本。
</Callout>

<Steps>
  <Step>
    ### 1. Fork 仓库 [#1-fork-仓库]

    访问 [https://github.com/better-auth/better-auth](https://github.com/better-auth/better-auth)

    点击右上角“Fork”按钮。
  </Step>

  <Step>
    ### 2. 克隆你的 Fork [#2-克隆你的-fork]

    ```bash
    # 将 YOUR-USERNAME 替换为你的 GitHub 用户名
    git clone https://github.com/YOUR-USERNAME/better-auth.git
    cd better-auth
    ```
  </Step>

  <Step>
    ### 3. 安装依赖 [#3-安装依赖]

    确保已安装 <Link href="https://pnpm.io/installation">pnpm</Link>！

    ```bash
    pnpm install
    ```
  </Step>

  <Step>
    ### 4. 准备环境文件 [#4-准备环境文件]

    复制示例环境文件以创建新的 `.env` 文件。

    ```bash
    cp -n ./docs/.env.example ./docs/.env
    ```
  </Step>
</Steps>

## 进行更改 [#进行更改]

当你确定想要贡献的内容后，就可以开始更改了。以下是入门步骤：

<Steps>
  <Step>
    ### 1. 创建新分支 [#1-创建新分支]

    ```bash
    # 添加上游远程仓库（如果尚未添加）
    git remote add upstream https://github.com/better-auth/better-auth.git

    # 确保你在 main 分支
    git checkout main

    # 拉取最新更改
    git pull upstream main

    # 创建并切换到新分支
    git checkout -b feature/your-feature-name
    ```
  </Step>

  <Step>
    ### 2. 启动开发服务器 [#2-启动开发服务器]

    启动开发服务器：

    ```bash
    pnpm dev
    ```

    启动文档服务器：

    ```bash
    pnpm -F docs dev
    ```
  </Step>

  <Step>
    ### 3. 进行更改 [#3-进行更改]

    * 对代码库进行更改。

    * 编写测试（如有需要）。（了解更多关于 <Link href="/docs/reference/contributing#测试">测试</Link>）

    * 更新文档。（了解更多关于 <Link href="/docs/reference/contributing#文档编写">文档编写</Link>）
  </Step>
</Steps>

### 问题与错误修复 [#问题与错误修复]

* 查看我们的 [GitHub 问题](https://github.com/better-auth/better-auth/issues)，寻找标记为 `good first issue` 的问题
* 报告错误时，请包含重现步骤和预期行为
* 在你希望处理的问题上留言，以避免重复工作

欢迎为更多框架贡献支持：

* 尽可能关注框架无关的解决方案

* 保持集成方案简洁且易于维护

* 所有集成目前都在主包中

* 重点关注尽可能与框架无关的解决方案

* 保持集成简洁且易于维护

* 所有集成目前都位于主包中

### 社交提供商集成 [#社交提供商集成]

在提议内置社交提供商或提供商辅助工具之前，请查看[社交提供商贡献政策](https://github.com/better-auth/better-auth/blob/main/CONTRIBUTING.md#social-provider-integrations)。

社区辅助工具可以使用 [Generic OAuth 插件](/docs/plugins/generic-oauth)独立开发，并提交以列入[其他社交提供商](/docs/authentication/other-social-providers#社区提供商辅助工具)。

### 插件开发 [#插件开发]

* 修正拼写和错误
* 添加示例，澄清现有内容
* 确保文档与代码更改同步更新

### 文档编写 [#文档编写]

* 修正拼写和错误
* 添加示例并澄清现有内容
* 确保文档随着代码更改而更新

## 测试 [#测试]

我们使用 Vitest 作为测试工具。请将测试文件放置在对应的源代码文件旁边：

```ts
import { describe, it, expect } from "vitest";
import { getTestInstance } from "better-auth/test";

describe("Feature", () => {
    it("should work as expected", async () => {
        const { client } = await getTestInstance();
        // 在这里编写测试代码
        expect(result).toBeDefined();
    });
});
```

### 使用测试实例辅助工具 [#使用测试实例辅助工具]

测试实例辅助工具现已支持改进的异步上下文管理以处理用户会话：

```ts
const { client, runWithUser, signInWithTestUser } = await getTestInstance();

// 以指定用户上下文运行测试
await runWithUser("user@example.com", "password", async (headers) => {
    // 该代码块内所有客户端调用将使用该用户的会话
    const response = await client.getSession();
    // headers 会自动应用
});

// 或使用测试用户的异步上下文
const { runWithDefaultUser } = await signInWithTestUser();
await runWithDefaultUser(async (headers) => {
    // 此处代码在测试用户会话上下文中运行
});
```

### 测试最佳实践 [#测试最佳实践]

* 编写清晰的提交信息
* 更新文档以反映你的更改
* 为新功能编写测试
* 遵循我们的编码标准
* 保持拉取请求专注于单一更改

## 需要帮助？ [#需要帮助]

请随时寻求帮助！你可以：

* 提出 <Link href="https://github.com/better-auth/better-auth/issues">问题</Link>
* 加入我们的 <Link href="https://discord.gg/better-auth">社区讨论</Link>
* 联系项目维护者

感谢你为 Better Auth 贡献代码！

