感谢您的贡献,您真是太棒了!
在开源领域,您可以做出各种各样的贡献,每一种贡献都非常宝贵。以下是一些指导原则,希望能帮助您准备贡献。
在开始贡献代码之前,您需要 fork 仓库。这取决于您要进行的贡献类型,操作方式略有不同。
react-router
代码的修改**都应该从dev
分支创建分支并合并到dev
分支。main
分支创建分支并合并到main
分支。以下步骤将帮助您开始为该仓库贡献代码更改。
# 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
npm
安装,将会生成不必要的package-lock.json
文件。请遵循问题模板并提供清晰的复现路径和代码示例。最佳方式是提交一个包含失败测试的 Pull Request。其次是提供 CodeSandbox 或仓库链接,用于演示 Bug。
示例可以直接添加到main
分支。从您本地克隆的main
分支创建新分支。完成后,创建一个 Pull Request 并概述您的示例。
请提供有见地的评论和一些代码示例,展示您希望如何在应用中使用 React Router。如果您能先展示当前 API 的限制,然后再得出需要更改和/或添加哪些内容的结论,这将有助于讨论。
我们从经验中了解到,较小的 API 通常更好,因此如果当前 API 没有明显的限制,我们可能会有点犹豫是否添加新内容。也就是说,我们始终渴望了解我们之前从未考虑过的情况,所以请不要害羞! :)
如果您需要修复某个 Bug,但没有人修复它,最好的办法是自己提供修复并提交Pull Request。开源代码属于我们所有人,推动它向前发展也是我们所有人的责任。
Pull Request 仅需两位或以上合作者批准即可合并;当 PR 作者是合作者时,这算作一次批准。
dev
分支。您可以在 GitHub 中创建 PR 时,使用“比较更改”标题下方的下拉菜单设置基础分支:
所有修复 Bug 或添加功能的提交都需要有对应的测试。
<blink>
未经测试的代码请勿合并!</blink>
所有更改或添加 API 的提交都必须在 Pull Request 中同时更新所有相关的示例和文档。
React Router 使用单体仓库来托管多个包的代码。这些包位于packages
目录中。
我们使用pnpm workspaces来管理依赖项的安装和各种脚本的运行。要安装所有内容,请确保已安装 pnpm,然后从仓库根目录运行pnpm install
。
从根目录调用pnpm build
将运行构建过程,这只需要几秒钟。一起构建所有包非常重要,因为各个包之间存在依赖关系。
在运行测试之前,您需要运行构建。构建完成后,从根目录运行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 [nextVersion]
# 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!
有时我们会遇到需要立即修复的关键 Bug。如果该 Bug 影响了最新版本,我们可以直接从main
(或存在 Bug 的相关主版本分支)创建新版本。
# 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 [nextVersion]
# 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