主分支
分支
主分支 (6.23.1)开发分支
版本
6.23.1v4/5.xv3.x
贡献
在本页

贡献 React Router

感谢你的贡献,你很棒!

在开源方面,有很多不同类型的贡献可以做出,所有这些贡献都是有价值的。以下是一些在你准备贡献时可以帮助你的指南。

设置

在你能够为代码库做出贡献之前,你需要 fork 仓库。这将根据你正在做出的贡献类型略有不同。

  • 所有新功能、错误修复或**任何触及react-router代码的内容**都应该从dev分支分支出来并合并到dev分支。
  • 仅触及文档的更改可以从main分支分支出来并合并到main分支。

以下步骤将帮助你设置好为这个仓库贡献更改。

  1. Fork 仓库(点击Fork按钮,位于此页面的右上角)。
  2. 将你的 fork 克隆到本地。
# in a terminal, cd to parent directory where you want your clone to be, then
git clone https://github.com/<your_github_username>/react-router.git
cd react-router

# if you are making *any* code changes, make sure to checkout the dev branch
git checkout dev
  1. 安装依赖项并构建。React Router 使用pnpm,所以你也应该使用它。如果你使用npm安装,将会生成不必要的package-lock.json文件。

你认为发现了错误?

请符合问题模板,并提供一个清晰的代码示例来重现问题。最好的方法是使用一个带有失败测试的拉取请求。其次是提供一个 CodeSandbox 或仓库的链接,以说明错误。

添加示例?

示例可以直接添加到主分支。从你的本地 main 克隆创建一个分支。完成后,创建一个拉取请求并概述你的示例。

建议新的或更改的 API?

请提供深思熟虑的评论和一些示例代码,展示你希望如何在你的应用程序中使用 React Router。如果你能先展示当前 API 如何限制你,然后再得出关于需要更改和/或添加的内容的结论,这将有助于对话。

我们从经验中得知,小的 API 通常更好,因此我们可能不太愿意添加新内容,除非当前 API 存在明显的限制。话虽如此,我们总是渴望听到我们以前没有考虑过的情况,所以请不要害羞!:)

问题没有得到关注?

如果你需要修复一个错误,但没有人修复它,最好的方法是提供一个修复方案并创建一个拉取请求。开源代码属于我们所有人,我们都有责任推动它向前发展。

创建拉取请求?

拉取请求只需要两位或更多合作者的批准才能合并;当 PR 作者是合作者时,这算作一位。

在 GitHub 中创建 PR 时,确保将基准设置为正确的分支。如果你提交的 PR 触及了任何代码,这应该是dev分支。你在 GitHub 中创建 PR 时,使用“比较更改”标题下方的下拉菜单设置基准:

测试

所有修复错误或添加功能的提交都需要一个测试。

<blink>不要在没有测试的情况下合并代码!</blink>

文档 + 示例

所有更改或添加 API 的提交都必须在拉取请求中完成,该拉取请求还更新所有相关的示例和文档。

开发

React Router 使用一个 monorepo 来托管多个包的代码。这些包位于packages目录中。

我们使用pnpm workspaces来管理依赖项的安装和运行各种脚本。要安装所有内容,请确保你已安装了 pnpm,然后从仓库根目录运行pnpm install

构建

从根目录调用pnpm build将运行构建,这应该只需要几秒钟。将所有包一起构建非常重要,因为react-router-domreact-router-native都使用react-router作为依赖项。

测试

在运行测试之前,你需要运行构建。构建完成后,从根目录运行pnpm test将运行**所有**包的测试。如果你想运行特定包的测试,请使用pnpm test --projects packages/<package-name>

# Test all packages
pnpm test

# Test only react-router-dom
pnpm test --projects packages/react-router-dom

仓库分支

这个仓库维护着用于不同目的的独立分支。它们看起来像这样

- main   > the most recent release and current docs
- dev    > code under active development between stable releases
- v5     > the most recent code for a specific major release

可能还有其他分支用于各种功能和实验,但所有神奇的事情都发生在这些分支中。

新版本

当需要发布新版本时,我们会根据我们的分支策略,根据版本类型遵循一个流程。

react-router@next 版本

我们从dev分支的当前状态创建实验性版本。它们可以通过使用@next标签安装。

pnpm add react-router-dom@next
# or
npm install react-router-dom@next

这些版本将在 PR 合并到dev分支时自动创建。

最新主要版本

# Start from the dev branch.
git checkout dev

# Merge the main branch into dev to ensure that any hotfixes and
# docs updates are available in the release.
git merge main

# Create a new release branch from dev.
git checkout -b release/v6.1.0

# Create a new tag and update version references throughout the
# codebase.
pnpm run version minor # | "patch" | "major"

# Push the release branch along with the new release tag.
git push origin release/v6.1.0 --follow-tags

# Wait for GitHub actions to run all tests. If the tests pass, the
# release is ready to go! Merge the release branch into main and dev.
git checkout main
git merge release/v6.1.0
git checkout dev
git merge release/v6.1.0

# The release branch can now be deleted.
git branch -D release/v6.1.0
git push origin --delete release/v6.1.0

# Now go to GitHub and create the release from the new tag. Let
# GitHub Actions take care of the rest!

热修复版本

有时我们需要立即修补一个关键错误。如果错误影响了最新版本,我们可以直接从main(或存在错误的相关主要版本分支)创建新版本。

# From the main branch, make sure to run the build and all tests
# before creating a new release.
pnpm install && pnpm build && pnpm test

# Assuming the tests pass, create the release tag and update
# version references throughout the codebase.
pnpm run version patch

# Push changes along with the new release tag.
git push origin main --follow-tags

# In GitHub, create the release from the new tag and it will be
# published via GitHub actions

# When the hot-fix is done, merge the changes into dev and clean
# up conflicts as needed.
git checkout dev
git merge main
git push origin dev