next build
)生成静态 HTML。getStaticProps
获取数据,支持预渲染所有页面。getServerSideProps
在请求时获取最新数据。getStaticProps
中设置 revalidate
参数(秒),触发条件:
• 初次访问时生成静态页面。
• 后续访问时,若超过 revalidate
时间,后台重新生成页面。useEffect
或 SWR
在组件挂载后获取数据。特性 | SSG | SSR | ISR | CSR |
生成时机 | 构建时 | 每次请求时 | 构建时 + 按需再生 | 客户端运行时 |
数据实时性 | 低(需重新构建) | 高(实时) | 中等(可配置更新间隔) | 高(动态获取) |
SEO 支持 | ✅ 最佳 | ✅ 良好 | ✅ 良好 | ❌ 差(需额外处理) |
首屏加载速度 | ⚡️ 最快 | ⏳ 较慢(依赖服务端) | ⚡️ 快(缓存优先) | ⏳ 慢(需加载 JS) |
适用场景 | 静态内容 | 实时数据 | 频繁更新但非实时内容 | 交互复杂、无需 SEO |
服务端压力 | 无 | 高 | 低 | 无 |
app
目录中,使用 React Server Components 减少客户端 JS 体积。特性 | App Router (Next.js 13+) | Page Router (Next.js 12 及更早) |
目录位置 | app 目录 | pages 目录 |
路由生成方式 | 基于文件夹路径定义路由(如 app/about/page.js → /about ) | 基于文件名自动生成路由(如 pages/about.js → /about ) |
动态路由 | 文件夹名用 [param] 标记(如 app/posts/[id]/page.js ) | 文件名用 [param] 标记(如 pages/posts/[id].js ) |
API 路由 | 支持 API 路由(如 app/api/route.ts ) | 使用 pages/api 目录 |
layout.js
文件定义层级布局,自动包裹子页面(如 app/dashboard/layout.js
包裹 app/dashboard/page.js
)。template.js
(局部刷新布局)和 error.js
(错误边界)。loading.js
定义页面加载时的骨架屏。_app.js
和 _document.js
自定义全局布局,无法自动嵌套。<Layout><Page /></Layout>
)。async/await
获取数据(默认为 React Server Component)。<Suspense>
分块加载多个数据源。metadata
对象动态设置页面标题、描述等。getStaticProps
(SSG)、getServerSideProps
(SSR)或 getInitialProps
(混合渲染)。_document.js
或页面组件内设置 <Head>
标签。特性 | App Router | Page Router |
默认渲染模式 | 支持 React Server Components(服务端组件优先) | 默认客户端渲染(需手动选择 SSG/SSR) |
流式渲染(Streaming) | 支持分块传输内容,优先显示关键部分 | 需自行实现(如使用 React.lazy ) |
静态生成(SSG) | 通过 generateStaticParams 预生成动态路由 | 通过 getStaticPaths 预生成路由 |
app
和 pages
目录共存,可逐步迁移旧项目。app
和 pages
中均有定义,app
目录的页面优先。next-auth
)可能需调整配置以兼容 App Router。场景 | App Router 优势 | Page Router 优势 |
新项目 | ✅ 推荐使用(功能更现代,性能更优) | ❌ 不推荐 |
旧项目维护 | ⚠️ 需逐步迁移 | ✅ 适合保留原有结构 |
复杂布局需求 | ✅ 嵌套布局和模板支持完善 | ❌ 需手动管理嵌套 |
服务端组件需求 | ✅ 默认支持服务端渲染和数据获取 | ❌ 需通过 getServerSideProps 实现 |
npm install --omit=dev
)。serverless.yml
配置入口文件和资源,支持自定义域名和 CDN。@vercel/next
构建器将页面拆分为独立函数,优化性能和资源利用率。fetch
等 API)和流式渲染(分块加载内容)。window
、localStorage
)。useState
管理状态并响应用户操作。特性 | 服务端组件 | 客户端组件 |
数据获取 | 可直接访问数据库、API 或敏感数据。 | 需通过客户端请求(如 fetch ),数据可能暴露。 |
React Hooks | 不支持 useState 、useEffect 等。 | 支持所有 React Hooks。 |
浏览器 API | 无法访问。 | 可访问 window 、document 等。 |
性能优化 | 减少客户端 JS 体积,提升 SEO 和首屏加载速度。 | 增加客户端 JS 体积,但支持动态交互。 |
嵌套规则 | 可包含客户端组件。 | 不可嵌套服务端组件(仅能通过 Props 传递数据)。 |
url
,pathname
或title
找到与页面关联的 issues。如果我们找不到与该页面匹配的issue,那么utterances 机器人会在第一次发表评论时自动创建 issue。.utterances
和 .utterances-frame
选择器自定义布局和样式。main
分支时部署到生产环境。VERCEL_TOKEN
、VERCEL_ORG_ID
和VERCEL_PROJECT_ID
相关token。VERCEL_TOKEN
。npm i -g vercel
安装Vercel CLI并运行vercel login
vercel link
以创建一个新的 Vercel 项目,或者是已有的Git 项目,会提示 ✅ Linked to
xxx-projects/next-starter-example
(created .vercel)
并生成.vercel 文件夹。{"projectId":"prj_xxx","orgId":"team_xxx"}
保存projectId和orgId。Vercel ID[This is your user ID within Vercel.]
API Token,是否可以作为VERCEL_ORG_ID
?[未验证]VERCEL_TOKEN
、VERCEL_ORG_ID
和VERCEL_PROJECT_ID
添加到 GitHub 项目的 actions secret 配置中。POST
请求的 URL,以触发部署并重新运行构建步骤。这些 URL 与您的项目、存储库和分支唯一链接,因此无需使用任何身份验证机制或向请求提供任何有效负载POST
。参考地址
。Periodically printing passages
echo "MESSAGE=${{ github.event.inputs.text_to_print || env.DEFAULT_MESSAGE }}" >> $GITHUB_ENV
MESSAGE
然后将其注入到变量中$GITHUB_ENV
。我们可以在Print some text
步骤中引用它。