mcpField
N
nextjs

nextjs

github.com/pproenca开发2181.2k 次安装11 周前更新
代码仓库

关于 nextjs

面向编码 Agent 和开发者的 Next.js 16 App Router 最佳实践技能,适用于开发、审查和现代化应用。45 条规则覆盖缓存、路由、数据获取及代码库级整理,并为多文件审查提供规定流程。

主要功能

  1. 01九类共 45 条规则
  2. 02针对 Next.js 16 的指导
  3. 03缓存与数据获取模式
  4. 04路由、Server Actions 与客户端边界
  5. 05结构化多文件审查算法

适用场景

  1. 01编写 Next.js 16 App Router 代码
  2. 02将应用从 Next.js 15 迁移
  3. 03审查或现代化代码库
  4. 04查找重复路由和未使用的操作

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/pproenca/dot-skills --skill nextjs

安装后在 Claude Code 中输入/nextjs确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

AGENTS.md
metadata.json
README.md
assets/templates/
_template.md
references/
_review-algorithm.md
_sections.md
action-error-handling.md
action-optimistic-updates.md
action-pending-states.md
action-revalidation.md
action-server-action-forms.md
build-barrel-files.md
build-dynamic-imports.md
build-external-packages.md
build-optimize-package-imports.md
build-turbopack-config.md
cache-fetch-options.md
cache-react-cache.md
cache-revalidate-path.md
cache-revalidate-tag.md
cache-segment-config.md
cache-use-cache-directive.md
client-children-pattern.md
client-hydration-mismatch.md
client-third-party-scripts.md
client-use-client-boundary.md
cross-boundary-coherence.md
cross-component-consolidation.md
cross-dead-code.md
cross-extract-shared-logic.md

详细介绍

Next.js 16 App Router 最佳实践

面向 AI Agent 的 Next.js 16 App Router 综合指南。包含 9 个类别中的 45 条规则,按影响程度排序,涵盖从关键问题(构建优化、缓存策略)到跨领域代码库规范(去重、无用路由、边界一致性)。反映 Next.js 16 的变化:用 'use cache' 指令取代隐式缓存,revalidateTag(tag, cacheLife) 的要求,用 proxy.ts 取代 middleware.ts,Turbopack 持久化缓存,以及 App Router 约定。

规则文件描述的是模式形式(而非 API 名称),并以 “识别模式” 部分开篇,列出同一种问题可能呈现的 2–4 种语法伪装。部分高价值规则(其伪装在实践中最常见的规则——'use cache'、并行获取、动态导入、Server Action 表单、客户端边界、服务端与客户端获取)还包含一组具体的**“伪装示例”**错误/正确示例,帮助读者掌握 grep 难以发现的模式。

适用场景

  • 编写新的 Next.js 16 App Router 代码
  • 审查或现代化改造 Next.js 代码库——单个文件、PR 或整个仓库(参见 references/_review-algorithm.md)
  • 从 Next.js 15 迁移到 16(隐式缓存 → 'use cache',middleware.ts → proxy.ts,revalidateTag 从单参数改为带 cacheLife)
  • 使用 'use cache'、unstable_cache、revalidateTag、revalidatePath 配置缓存策略
  • 实现 Server Components 和并行/就近的数据获取
  • 配置并行路由、拦截路由、预取和 proxy.ts
  • 创建用于表单处理和数据变更的 Server Actions
  • 调整 'use client' 边界,以尽可能缩小客户端包
  • 发现代码库级问题,此类问题无法通过单文件规则发现:重复的服务端数据获取函数、近似重复的路由/布局、无用路由、'use client' 在路由树中的传播、属性形状偏移(参见类别 9)

如何审查或重构代码库

当用户要求审查、重构、现代化改造或审计 Next.js 代码(单个文件或整个仓库)时,请遵循 references/_review-algorithm.md。不要自行发挥。

该文档中的四项硬性要求:

  1. 两种模式——绝不拒绝审计整个仓库。 选择 模式 A(限定范围,≤~20 个文件)或 模式 B(整个目录树:清点 + 定向扫描 + 完整类别 9)。
  2. 判断优先于 grep。 每条规则描述的是一种模式形式,而非语法标记。扫描前请阅读每条规则的 “识别模式” 部分——grep 能找到容易发现的违规项,却会漏掉高价值问题(为了一个按钮而标记为 'use client' 的布局;使用 TanStack Query 获取初始页面数据;由路由处理程序承担 Server Action 的工作;手写缓存层来仿照 'use cache';隐藏在父/子 Server Components 中的顺序获取)。
  3. 按类别扫描,而非按文件扫描——并设置强制检查机制。 按优先级(CRITICAL → … → CROSS-CUTTING)一次扫描一个类别,覆盖所有纳入范围的文件。该算法要求提供范围声明、每个类别的进度行,以及最终的覆盖情况表(类别 × 文件/分组,单元格取值 ∈ {clean, N findings, n/a})。输出中缺少某个类别会立即显现。
  4. 代码库级问题来自类别 9。 单文件规则无法告诉你“这两个路由应该合并”或“这个服务端操作已经无用”。类别 9(代码库规范)会在最后扫描完整清单,并给出删除/去重/复用/整合方面的发现。

单文件的临时问题(例如“这个缓存策略对吗?”)可以直接查看相关规则。该算法适用于涉及多个文件或整个仓库的情况。

规则类别

#类别影响规则主要主题
1构建与打包优化严重5Turbopack、optimizePackageImports、动态导入、barrel 文件、serverExternalPackages
2缓存策略严重6'use cache'、revalidateTag+cacheLife、fetch 选项、段配置
3服务端组件与数据获取高6并行获取、流式传输、共置、预加载、避免客户端获取、错误处理
4路由与导航高5并行路由、拦截路由、预取、proxy.ts、notFound()
5服务端操作与变更中高5服务端操作、useFormStatus、操作结果错误、useOptimistic、重新验证
6流式传输与加载状态中5Suspense 放置、loading.tsx、error.tsx、骨架屏匹配、嵌套 Suspense
7元数据与 SEO中4generateMetadata、sitemap.ts、robots.ts、opengraph-image.tsx
8客户端组件低中4'use client' 边界、children 模式、水合不匹配、next/script
9代码库整洁性低中5去重服务端数据获取器、整合路由、清理无用路由/操作、'use client' 传播、属性漂移

快速参考

关键模式——首先确保这些做法正确:

  • 对结果应缓存的服务端组件/函数添加 'use cache'(Next.js 16 移除了隐式 fetch 缓存)
  • 调用 revalidateTag(tag, cacheLife) 并指定配置文件——不要使用单参数 API
  • 为导出结构扁平的图标/实用工具库配置 optimizePackageImports
  • 不要禁用 Turbopack 持久缓存
  • 使用 <form action={serverAction}>,而不是向 /api/... 发送 POST 请求

Next.js 16 惯用写法(不要生成 Next.js 15 的模式):

  • proxy.ts(Node 运行时)——不要使用 middleware.ts(Edge)
  • 显式使用 'use cache'——不要依赖隐式 fetch 缓存
  • revalidateTag(tag, cacheLife)——不要使用单参数 revalidateTag(tag)
  • 服务端操作 + useActionState——不要使用客户端 fetch + useState
  • app/sitemap.ts——不要手动维护 public/sitemap.xml

常见的单文件错误——避免这些反模式:

  • 对彼此独立的数据按顺序使用 await(应使用 Promise.all 或预加载)
  • 在客户端组件中使用 useEffect + fetch 获取初始页面数据
  • 为了一个可交互按钮就在布局层级添加 'use client'
  • 执行会更改数据的服务端操作后,未调用 revalidatePath/revalidateTag
  • 骨架屏尺寸与内容不匹配(导致 CLS 问题)

代码库级模式——在类别 9 的检查中关注这些情况:

  • 2 个或更多服务端组件请求同一上游服务,但缓存策略各不相同——提取为共享的缓存数据获取器
  • 2 个或更多几乎重复的路由/布局本应通过变体或动态段合并为一个——整合
  • 90 天或更久没有入站流量的路由/路由处理程序/服务端操作——删除(先检查分析数据)
  • 因一个可交互叶节点而导致 'use client' 沿路由树向上传播——将布局/父级降级为服务端组件,仅保留一个客户端岛
  • 同一概念使用了不同的路由参数/搜索参数/属性名称——统一为规范名称(注意 SEO 重定向)

目录

  1. 构建与打包优化 — CRITICAL
  2. 缓存策略 — CRITICAL
  3. 服务端组件与数据获取 — HIGH
  4. 路由与导航 — HIGH
  5. Server Action 与数据修改 — MEDIUM-HIGH
  6. 流式传输与加载状态 — MEDIUM
  7. 元数据与 SEO — MEDIUM
  8. 客户端组件 — LOW-MEDIUM
  9. 代码库规范 — CROSS-CUTTING(涉及多个文件的问题;全仓库审计必查)

参考资料

  1. Next.js 文档
  2. Next.js 16 发布说明
  3. React 文档
  4. Vercel 工程博客

相关技能

  • 关于 React 19 基础知识(并发渲染、hooks、组件),请参阅 react 技能
  • 关于客户端表单处理,请参阅 react-hook-form 技能
  • 关于使用 TanStack Query 缓存客户端数据,请参阅 tanstack-query 技能

完整编译文档

如需查看包含所有展开规则的完整指南:AGENTS.md

评论

支持 Markdown