有许多不同的方式可以为 Nuxt 生态系统做出贡献。
Nuxt 生态系统包含许多不同的项目和组织:
nuxt-modules 的流程。虽然这些模块有各自的维护者,但它们不依赖于单一人员。查看你想要帮助的项目的 issues 和 discussions。例如,这是 Nuxt 的issues 面板和discussions。帮助其他用户、分享变通方案、创建可复现的示例,或者稍微研究一个 bug 并分享你的发现,都会产生巨大的影响。
感谢你抽时间创建 Issue!❤️
在响应 Issues 时,我们会尽量遵循我们的内部问题决策流程图。
我们始终欢迎 Pull Requests!❤️
在修复 bug 之前,建议先检查是否已有描述该问题的 issue,因为它可能是文档问题或存在一些有用的上下文信息。
如果你在开发一个新功能,我们要求你先打开功能请求的 issue,与维护者讨论该功能是否被需要以及功能的设计。这可以为维护者和贡献者节省时间,并能让功能更快地发布。issue 需要由框架团队成员确认,才建议在 PR 中实现该功能。
对于拼写或错别字修复,建议将多个拼写修复合并为一个 Pull Request,以保持提交历史的整洁。
对于对 Nuxt 本身的较大更改,我们建议你先创建一个 Nuxt 模块并在其中实现该功能。这有助于快速验证概念。然后你可以以 discussion 的形式创建 RFC。在用户采用并收集反馈后,可以进一步完善并将其合并到 Nuxt 核心或继续作为独立模块存在。
我们在提交信息中使用 Conventional Commits,这可以基于提交自动生成变更日志。如果你不熟悉,请阅读该指南。
注意,fix: 和 feat: 应用于实际的代码更改(可能会影响逻辑)。对于拼写或文档更改,请使用 docs: 或 chore::
fix: typodocs: fix typo如果你在像 nuxt/nuxt 这样的 monorepo 项目中工作,请确保在提交时在括号中指定主要作用域。例如:feat(kit): add 'addMagicStuff' utility。
如果你不知道如何发起 Pull Request,建议阅读该指南。
发起 PR 时,请确保 PR 的标题也遵循提交规范。
如果你的 PR 修复或解决了现有 issue,请在 PR 描述中提及它们。
一个 PR 中有多个提交是可以接受的;你不需要为你的变更 rebase 或强制推送,因为我们在合并时会使用 Squash and Merge 将这些提交压缩为一个提交。
我们不会添加任何提交钩子以便快速提交。但是在创建 PR 之前,请确保任何 lint/test 脚本都是通过的。
通常,请确保 PR 中没有无关的更改。例如,如果你的编辑器在你编辑的文件的其他地方更改了空格或格式,请还原这些更改,以便更清楚地看出你的 PR 做了哪些更改。并请避免在单个 PR 中包含多个不相关的功能或修复。如果可以拆分,最好分别提交多个 PR 以便单独审查和合并。一般来说,PR 应该只做“一件事”。
创建 PR 后,我们会尽力尽快进行审查。
如果我们把 PR 指派给某位维护者,表示该人会特别负责审查并按需实现变更。
如果我们在 PR 上请求了更改,请别被红色文字吓到!这并不意味着我们认为这是个糟糕的 PR —— 这只是方便快速查看一系列 PR 状态的方式之一。
如果我们将 PR 标记为“pending”,这意味着在审查该 PR 时我们可能还有其他任务要做 —— 这是内部的备忘,并不一定反映该 PR 是否是个好想法或有问题。我们会尽力通过评论解释 pending 状态的原因。
在响应和审阅 Pull Request 时,我们也会尽量遵循我们的 PR 决策流程图。
我们欢迎在为 Nuxt 做贡献时审慎地使用 AI 工具,同时要求所有贡献者遵循两个核心原则。
我们的目标是确保质量并保持与真实人物协作和沟通的乐趣。如果你有改进 Nuxt 社区 AI 使用政策的想法,我们非常愿意听取!❤️
如果你用 Nuxt 构建了很酷的东西,为什么不把它提取为一个模块,与他人共享呢?我们已经有许多优秀的模块,但总有更多空间。
如果在构建过程中需要帮助,欢迎随时与我们取得联系。
我们强烈建议先创建一个模块来测试大型新功能并获得社区采用。
如果你已经这么做了,或者创建新模块不合适,请先创建一个新的 discussion。确保尽可能清晰地说明你的思路。为新的 API 包含代码示例或函数签名,并引用现有的问题或痛点示例。
如果我们认为这应该成为 RFC,我们会将类别更改为 RFC 并更广泛地征求反馈。
RFC 将经历以下阶段:
rfc: active - 正在征求评论rfc: approved - 已被 Nuxt 团队批准rfc: ready to implement - 已创建并分配实现的 issuerfc: shipped - 已实现rfc: archived - 未被批准,但归档以备将来参考以下约定在 nuxt/ 组织内为必需,且建议生态系统中其他维护者采用。
unjs/ 库我们推荐在生态系统中使用下列库:
type: module大多数 Nuxt 生态系统可以直接消费 ESM。总体上我们建议避免使用 CJS 特有的代码,例如 __dirname 和 require 语句。你可以在此处阅读有关 ESM 的更多内容。
Corepack 确保在运行对应命令时使用正确版本的包管理器。项目的 package.json 中可能包含 packageManager 字段。
在下面示例配置的项目中,Corepack 会安装 pnpm 的 v7.5.0(如果你尚未安装),并使用它来运行命令。
{
"packageManager": "pnpm@7.5.0"
}
我们使用 ESLint 结合 @nuxt/eslint 来做 lint 和格式化。
我们推荐使用 VS Code 和 ESLint 扩展。如果你愿意,可以在保存时启用自动修复和格式化正在编辑的代码:
{
"editor.codeActionsOnSave": {
"source.fixAll": "never",
"source.fixAll.eslint": "explicit"
}
}
由于 ESLint 已配置为格式化代码,因此无需用 Prettier 重复该功能。要格式化代码,可以运行 yarn lint --fix、pnpm lint --fix 或 bun run lint --fix,或参考 ESLint 部分 了解 IDE 设置。
如果你的编辑器中安装了 Prettier,建议在参与项目工作时将其禁用以避免冲突。
我们推荐在模块、库和应用中使用 pnpm 作为包管理器。
重要的是启用 Corepack,以确保你使用的包管理器版本与项目一致。Corepack 已内置于较新的 Node 版本中,以实现无缝的包管理器集成。
启用命令为:
corepack enable
在你的计算机上安装 Node.js 后,你只需要执行一次该操作。
文档是 Nuxt 的重要组成部分。我们力求成为一个直观的框架 —— 而这很大程度上取决于开发者体验和文档在整个生态系统中的完备程度。👌
下面是一些可能有助于改进文档的建议: