文档贡献指南
欢迎来到 Next.js 文档贡献指南!我们很高兴你来到这里。
本页提供了如何编辑 Next.js 文档的说明。我们的目标是确保社区中的每个人都感到有能力贡献和改进我们的文档。
为什么要贡献?
开源工作永远不会完成,文档也是如此。为文档做出贡献是初学者参与开源的好方法,也是经验丰富的开发者在与社区分享知识的同时澄清更复杂主题的好方法。
通过为 Next.js 文档做出贡献,你正在帮助我们为所有开发者构建更强大的学习资源。无论你发现了拼写错误、令人困惑的部分,还是意识到某个特定主题缺失,你的贡献都受到欢迎和赞赏。
如何贡献
文档内容可以在 Next.js 仓库 中找到。要贡献,你可以直接在 GitHub 上编辑文件,或者克隆 仓库并在本地编辑文件。
GitHub 工作流程
如果你是 GitHub 新手,我们建议阅读 GitHub 开源指南 来了解如何分叉仓库、创建分支和提交拉取请求。
提示:底层文档代码位于私有代码库中,该代码库与 Next.js 公共仓库同步。这意味着你无法在本地预览文档。但是,在合并拉取请求后,你会在 nextjs.org 上看到你的更改。
编写 MDX
文档使用 MDX 编写,这是一种支持 JSX 语法的 markdown 格式。这允许我们在文档中嵌入 React 组件。请参阅 GitHub Markdown 指南 以快速了解 markdown 语法。
VSCode
本地预览更改
VSCode 有一个内置的 markdown 预览器 ,你可以用它来本地查看你的编辑。要为 MDX 文件启用预览器,你需要在用户设置中添加配置选项。
打开命令面板(Mac 上为 ⌘ + ⇧ + P
,Windows 上为 Ctrl + Shift + P
)并搜索 Preferences: Open User Settings (JSON)
。
然后,将以下行添加到你的 settings.json
文件中:
{
"files.associations": {
"*.mdx": "markdown"
}
}
接下来,再次打开命令面板,搜索 Markdown: Preview File
或 Markdown: Open Preview to the Side
。这将打开一个预览窗口,你可以在其中查看格式化的更改。
扩展
我们还为 VSCode 用户推荐以下扩展:
审查流程
一旦你提交了贡献,Next.js 或开发者体验团队将审查你的更改,提供反馈,并在准备就绪时合并拉取请求。
如果你有任何问题或需要进一步的帮助,请在 PR 的评论中告诉我们。感谢你为 Next.js 文档做出贡献并成为我们社区的一部分!
提示:在提交 PR 之前运行
pnpm prettier-fix
来运行 Prettier。
文件结构
文档使用文件系统路由。/docs
内的每个文件夹和文件都代表一个路由段。这些段用于生成 URL 路径、导航和面包屑。
文件结构反映了你在网站上 看到的导航,默认情况下,导航项按字母顺序排序。但是,我们可以通过在文件夹或文件名前添加两位数(00-
)来更改项目的顺序。
例如,在函数 API 参考中,页面按字母顺序排序,因为这样更容易让开发者找到特定函数:
04-functions
├── after.mdx
├── cacheLife.mdx
├── cacheTag.mdx
└── ...
但是,在路由部分中,文件以两位数前缀,按开发者应该学习这些概念的顺序排序:
01-routing
├── 01-defining-routes.mdx
├── 02-pages.mdx
├── 03-layouts-and-templates.mdx
└── ...
要快速找到页面,你可以使用 ⌘ + P
(Mac)或 Ctrl + P
(Windows)在 VSCode 中打开搜索栏。然后,输入你要查找的页面的 slug。例如 defining-routes
为什么不使用清单?
我们考虑过使用清单文件(生成文档导航的另一种流行方式),但我们发现清单会很快与文件不同步。文件系统路由迫使我们思考文档的结构,并且对 Next.js 感觉更原生。
元数据
每个页面在文件顶部都有一个由三个破折号分隔的元数据块。
必需字段
以下字段是必需的:
字段 | 描述 |
---|---|
title | 页面的 <h1> 标题,用于 SEO 和 OG 图像。 |
description | 页面的描述,用于 <meta name="description"> 标签中的 SEO。 |
---
title: 页面标题
description: 页面描述
---
良好的做法是将页面标题限制为 2-3 个单词(例如优化图像),将描述限制为 1-2 个句子(例如了解如何在 Next.js 中优化图像)。
可选字段
以下字段是可选的:
字段 | 描述 |
---|---|
nav_title | 在导航中覆盖页面的标题。当页面标题太长而无法适应时,这很有用。如果未提供,则使用 title 字段。 |
source | 将内容拉入共享页面。请参阅共享页面。 |
related | 文档底部的相关页面列表。这些将自动转换为卡片。请参阅相关链接。 |
version | 开发阶段。例如 experimental 、legacy 、unstable 、RC |
---
sidebar_label: 导航项标题
source: app/building-your-application/optimizing/images
related:
description: 查看图像组件 API 参考。
links:
- app/api-reference/components/image
version: experimental
---
App
和 Pages
文档
由于App 路由和Pages 路由中的大多数功能完全不同,它们的文档分别保存在不同的部分(02-app
和 03-pages
)中。但是,它们之间有一些共享的功能。
共享页面
为了避免内容重复和内容不同步的风险,我们使用 source
字段将内容从一个页面拉入另一个页面。例如,<Link>
组件在App和Pages中的行为_大部分_相同。我们可以将内容从 app/.../link.mdx
拉入 pages/.../link.mdx
,而不是复制内容:
---
title: <Link>
description: <Link> 组件的 API 参考。
---
此 API 参考将帮助你了解如何使用 Link 组件可用的 props 和配置选项。
---
title: <Link>
description: <Link> 组件的 API 参考。
source: app/api-reference/components/link
---
{/* 请勿编辑此页面。 */}
{/* 此页面的内容从上面的源拉取。 */}
因此,我们可以在一个地方编辑内容,并在两个部分中反映出来。
共享内容
在共享页面中,有时可能有App 路由或Pages 路由特定的内容。例如,<Link>
组件有一个 shallow
prop,仅在Pages中可用,但在App中不可用。
为了确保内容只在正确的路由中显示,我们可以将内容块包装在 <AppOnly>
或 <PagesOnly>
组件中:
此内容在 App 和 Pages 之间共享。
<PagesOnly>
此内容将仅在 Pages 文档中显示。
</PagesOnly>
此内容在 App 和 Pages 之间共享。
你可能会将这些组件用于示例和代码块。
代码块
代码块应该包含可以复制和粘贴的最小工作示例。这意味着代码应该能够运行而无需任何额外配置。
例如,如果你要展示如何使用 <Link>
组件,你应该包含 import
语句和 <Link>
组件本身。
import Link from 'next/link'
export default function Page() {
return <Link href="/about">关于</Link>
}
在提交之前,始终在本地运行示例。这将确保代码是最新的并且可以工作。
语言和文件名
代码块应该有一个包含语言和 filename
的头部。添加 filename
prop 来渲染一个特殊的终端图标,帮助用户确定在哪里输入命令。例如:
```bash filename="Terminal"
npx create-next-app
```
文档中的大多数示例都是用 tsx
和 jsx
编写的,少数用 bash
编写。但是,你可以使用任何支持的语言,这里是完整列表。
编写 JavaScript 代码块时,我们使用以下语言和扩展名组合。
语言 | 扩展名 | |
---|---|---|
包含 JSX 代码的 JavaScript 文件 | ```jsx | .js |
不包含 JSX 的 JavaScript 文件 | ```js | .js |
包含 JSX 的 TypeScript 文件 | ```tsx | .tsx |
不包含 JSX 的 TypeScript 文件 | ```ts | .ts |
提示:
- 确保在 JavaScript 文件中使用
js
扩展名和 JSX 代码。- 例如,```jsx filename="app/layout.js"
TS 和 JS 切换器
添加语言切换器以在 TypeScript 和 JavaScript 之间切换。代码块应该是 TypeScript 优先,带有 JavaScript 版本以适应用户。
目前,我们一个接一个地编写 TS 和 JS 示例,并用 switcher
prop 链接它们:
```tsx filename="app/page.tsx" switcher
```
```jsx filename="app/page.js" switcher
```
提示:我们计划在未来自动将 TypeScript 代码片段编译为 JavaScript。同时,你可以使用 transform.tools。
行高亮
可以高亮代码行。当你想引起对代码特定部分的注意时,这很有用。你可以通过向 highlight
prop 传递数字来高亮行。
单行: highlight={1}
import Link from 'next/link'
export default function Page() {
return <Link href="/about">关于</Link>
}
多行: highlight={1,3}
import Link from 'next/link'
export default function Page() {
return <Link href="/about">关于</Link>
}
行范围: highlight={1-5}
import Link from 'next/link'
export default function Page() {
return <Link href="/about">关于</Link>
}