贡献指南

Contributing

这是所有 AdonisJS 仓库的通用贡献指南。在贡献任何仓库之前,请仔细阅读本指南 🙏

代码并不是贡献的唯一方式。以下也是一些贡献并成为社区一员的方式:

  • 修正文档中的错别字
  • 改进现有文档
  • 撰写指导手册或博客文章以教育社区中的其他人
  • 筛选问题
  • 就现有问题发表意见
  • 在 Discord 和讨论论坛中帮助社区

报告错误

在开源项目中报告的许多问题通常是报告者方面的问题或配置错误。因此,我们强烈建议你在报告问题之前先自行排查。

如果你要报告错误,请提供尽可能多的信息以及你编写的代码示例。良好问题和不良问题的范围如下:

  • 完美问题:你隔离了底层错误。在仓库中创建一个失败的测试,并围绕它打开一个 GitHub 问题。

  • 良好问题:你隔离了底层错误,并提供了一个最小的 GitHub 仓库复现。Antfu 写了一篇关于为什么需要复现 的好文章。

  • 不错的问题:你准确陈述了问题。分享最初产生问题的代码。同时,包括相关的配置文件和你使用的包版本。

    最后但同样重要的是,按照 GitHub Markdown 语法指南 正确格式化每个代码块。

  • 差劲的问题:你抛出问题,希望其他人会问相关问题并帮助你。这类问题会自动关闭,且没有任何解释。

进行讨论

你可能经常想要讨论某个话题或分享一些想法。在这种情况下,请在讨论论坛的 💡Ideas 类别下创建一个讨论。

教育他人

教育他人是贡献于任何社区并获得认可的最佳方式之一。

你可以使用我们讨论论坛上的 📚 Cookbooks 类别与他人分享文章。指导手册部分并不严格受控,但分享的知识应与项目相关。

创建拉取请求

在投入大量时间和精力编写代码后,拉取请求被拒绝绝不是一种好的体验。因此,我们强烈建议你在开始任何新工作之前先开始讨论

只需开始讨论并解释你计划贡献什么?

  • 你是否试图创建拉取请求以修复错误:一旦错误得到确认,修复错误的拉取请求通常会被接受。

  • 你是否计划添加新功能:请详细解释为什么需要此功能,并分享我们可以阅读的学习材料链接以进行自我教育。

    例如:如果你正在为 Japa 或 AdonisJS 添加快照测试支持。那么请分享我可以用来了解快照测试的一般信息的链接。

注意:你还应准备好为记录贡献的功能或改进打开额外的拉取请求。

仓库设置

  1. 首先在本地机器上克隆仓库。

    git clone <REPO_URL>
  2. 在本地安装依赖项。请不要在功能请求中更新任何依赖项。如果发现依赖项过时,请创建单独的拉取请求来更新它们。

    我们使用 npm 来管理依赖项,因此请不要使用 yarn 或任何其他工具。

    npm install
  3. 通过执行以下命令运行测试。

    npm test

使用的工具

以下是正在使用的工具列表。

工具用法
TypeScript所有仓库都用 TypeScript 编写。编译后的 JavaScript 和类型定义发布在 npm 上。
TS Node我们使用 ts-node 运行测试或脚本,而无需编译 TypeScript。ts-node 的主要目标是在开发过程中实现更快的反馈循环。
SWCSWC 是一个基于 Rust 的 TypeScript 编译器。TS Node 提供了一流的支持,可以使用 SWC 而不是 TypeScript 官方编译器。使用 SWC 的主要原因是速度提升。
Release-It我们使用 release-it 在 npm 上发布我们的包。它负责创建发布的所有繁重工作,并将其发布在 npm 和 GitHub 上。其配置在 package.json 文件中定义。
ESLintESLint 帮助我们在所有仓库中强制执行一致的编码风格,这些仓库有多个贡献者。我们所有的 ESLint 规则都发布在 eslint-plugin-adonis 包下。
Prettier我们使用 prettier 来格式化代码库,以获得一致的视觉输出。如果你对为什么我们同时使用 ESLint 和 Prettier 感到困惑,请阅读 Prettier 网站上的 Prettier vs. Linters 文档。
EditorConfig每个项目根目录中的 .editorconfig 文件配置你的代码编辑器使用一组规则来进行缩进和空白管理。再次强调,Prettier 用于后期格式化你的代码,而 Editorconfig 用于提前配置编辑器。
Conventional Changelog所有仓库中的所有提交都使用 commitlint 来强制执行一致的提交信息。
Husky我们使用 husky 在提交代码时强制执行提交规范。Husky 是一个用 Node 编写的 git 钩子系统。

命令

命令描述
npm run test使用 ts-node 运行项目测试
npm run compile将 TypeScript 项目编译为 JavaScript。编译后的输出写入 build 目录
npm run release使用 np 开始发布过程
npm run lint使用 ESLint 检查代码库
npm run format使用 Prettier 格式化代码库
npm run sync-labels.github/labels.json 文件中定义的标签与 GitHub 同步。此命令仅供项目管理员使用。

编码风格

我们的所有项目都用 TypeScript 编写,并正在转向纯 ESM。

此外,在推送代码之前,请确保运行以下命令。

# 使用 prettier 格式化
npm run format
# 使用 ESLint 检查
npm run lint

成为认可的贡献者

我们依赖 GitHub 在仓库右侧面板中列出所有仓库贡献者。以下是一个示例。

此外,我们使用 GitHub 的自动生成发行说明 功能,该功能会在发行说明中添加对贡献者个人资料的引用。