nextjs-validator
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseNext.js Validator
Next.js Validator
Validates Next.js 16 configuration and prevents deprecated patterns. AI assistants often generate Next.js 14/15 patterns - this skill enforces Next.js 16.
验证Next.js 16配置并防止已弃用的模式。AI助手通常会生成Next.js 14/15的模式——本工具强制遵循Next.js 16规范。
When This Activates
触发场景
- Setting up a new Next.js project
- Before any Next.js development work
- Auditing existing Next.js projects
- After AI generates Next.js code
- CI/CD pipeline validation
- 搭建新的Next.js项目时
- 开展任何Next.js开发工作前
- 审计现有Next.js项目时
- AI生成Next.js代码后
- CI/CD流水线验证环节
Quick Start
快速开始
bash
python3 ~/.claude/skills/nextjs-validator/scripts/validate.py --root .
python3 ~/.claude/skills/nextjs-validator/scripts/validate.py --root . --strictbash
python3 ~/.claude/skills/nextjs-validator/scripts/validate.py --root .
python3 ~/.claude/skills/nextjs-validator/scripts/validate.py --root . --strictWhat Gets Checked
检查内容
1. Package Version
1. 包版本
json
// GOOD: v16+
"next": "^16.0.0"
// BAD: v15 or earlier
"next": "^15.0.0"json
// GOOD: v16+
"next": "^16.0.0"
// BAD: v15或更早版本
"next": "^15.0.0"2. Proxy vs Middleware
2. Proxy与Middleware
GOOD - Next.js 16:
typescript
// proxy.ts (Node.js runtime - REQUIRED)
import { createProxy } from 'next/proxy';
export const proxy = createProxy();BAD - Deprecated:
typescript
// middleware.ts (Edge runtime - DEPRECATED)
export function middleware() { }推荐 - Next.js 16:
typescript
// proxy.ts (Node.js 运行时 - 必需)
import { createProxy } from 'next/proxy';
export const proxy = createProxy();已弃用:
typescript
// middleware.ts (Edge 运行时 - 已弃用)
export function middleware() { }3. App Router Structure
3. App Router 结构
GOOD:
app/
├── layout.tsx # Root layout
├── page.tsx # Home page
├── (routes)/ # Route groups
│ ├── dashboard/
│ │ └── page.tsx
│ └── settings/
│ └── page.tsx
└── api/ # API routes (optional)BAD - Pages Router (deprecated):
pages/
├── _app.tsx
├── index.tsx
└── api/推荐:
app/
├── layout.tsx # 根布局
├── page.tsx # 首页
├── (routes)/ # 路由组
│ ├── dashboard/
│ │ └── page.tsx
│ └── settings/
│ └── page.tsx
└── api/ # API 路由(可选)不推荐 - Pages Router(已弃用):
pages/
├── _app.tsx
├── index.tsx
└── api/4. Cache Components & use cache
use cache4. 缓存组件与use cache
use cacheGOOD - Next.js 16:
typescript
// app/dashboard/page.tsx
'use cache';
export default async function Dashboard() {
const data = await fetch('/api/data');
return <DashboardView data={data} />;
}推荐 - Next.js 16:
typescript
// app/dashboard/page.tsx
'use cache';
export default async function Dashboard() {
const data = await fetch('/api/data');
return <DashboardView data={data} />;
}5. Server Actions
5. Server Actions
GOOD:
typescript
// app/actions.ts
'use server';
export async function createItem(formData: FormData) {
// Server-side logic
}推荐:
typescript
// app/actions.ts
'use server';
export async function createItem(formData: FormData) {
// 服务端逻辑
}6. Turbopack Configuration
6. Turbopack 配置
GOOD - Default in Next.js 16:
json
// next.config.ts (Turbopack is default, no config needed)BAD - Disabling Turbopack:
json
// Don't disable unless absolutely necessary
experimental: {
turbo: false // BAD
}推荐 - Next.js 16 默认配置:
json
// next.config.ts (Turbopack 是默认配置,无需额外设置)不推荐 - 禁用 Turbopack:
json
// 除非绝对必要,否则不要禁用
experimental: {
turbo: false // 不推荐
}7. Config File Format
7. 配置文件格式
GOOD - TypeScript config:
typescript
// next.config.ts
import type { NextConfig } from 'next';
const config: NextConfig = {
// ...
};
export default config;BAD - JavaScript config:
javascript
// next.config.js - Prefer .ts
module.exports = { }推荐 - TypeScript 配置:
typescript
// next.config.ts
import type { NextConfig } from 'next';
const config: NextConfig = {
// ...
};
export default config;不推荐 - JavaScript 配置:
javascript
// next.config.js - 优先使用.ts格式
module.exports = { }Deprecated Patterns to Avoid
需要避免的已弃用模式
| Deprecated (v15-) | Replacement (v16+) |
|---|---|
| |
| Server Components + |
| Server Components + |
| |
| |
| |
| |
| |
| |
| 已弃用(v15及更早版本) | 替代方案(v16+) |
|---|---|
| |
| 服务端组件 + |
| 服务端组件 + |
| |
| |
| |
| |
| |
| 来自 |
Next.js 16 Features to Use
Next.js 16 推荐使用的功能
Cache Components
缓存组件
typescript
'use cache';
// Entire component cached
export default async function CachedPage() {
const data = await fetchData();
return <View data={data} />;
}typescript
'use cache';
// 整个组件将被缓存
export default async function CachedPage() {
const data = await fetchData();
return <View data={data} />;
}Partial Pre-Rendering (PPR)
部分预渲染(PPR)
typescript
// next.config.ts
const config: NextConfig = {
experimental: {
ppr: true,
},
};typescript
// next.config.ts
const config: NextConfig = {
experimental: {
ppr: true,
},
};Next.js DevTools MCP
Next.js DevTools MCP
AI-assisted debugging with contextual insight:
typescript
// Enable in development
// Works with Claude Code and other MCP-compatible tools具备上下文洞察的AI辅助调试:
typescript
// 在开发环境中启用
// 兼容Claude Code及其他MCP兼容工具Parallel Routes
并行路由
app/
├── @modal/
│ └── login/
│ └── page.tsx
├── @sidebar/
│ └── default.tsx
└── layout.tsxapp/
├── @modal/
│ └── login/
│ └── page.tsx
├── @sidebar/
│ └── default.tsx
└── layout.tsxIntercepting Routes
拦截路由
app/
├── feed/
│ └── page.tsx
├── photo/
│ └── [id]/
│ └── page.tsx
└── @modal/
└── (.)photo/
└── [id]/
└── page.tsxapp/
├── feed/
│ └── page.tsx
├── photo/
│ └── [id]/
│ └── page.tsx
└── @modal/
└── (.)photo/
└── [id]/
└── page.tsxValidation Output
验证输出示例
=== Next.js 16 Validation Report ===
Package Version: next@16.1.0 ✓
File Structure:
✓ Using app/ directory (App Router)
✗ Found pages/ directory - migrate to App Router
✓ Found proxy.ts
✗ Found middleware.ts - migrate to proxy.ts
Patterns:
✓ Using Server Components
✗ Found getServerSideProps in 2 files
✓ Using next/navigation
Config:
✓ next.config.ts (TypeScript)
✓ Turbopack enabled (default)
Summary: 2 issues found
- Migrate pages/ to app/ directory
- Replace middleware.ts with proxy.ts=== Next.js 16 验证报告 ===
包版本: next@16.1.0 ✓
文件结构:
✓ 使用app/目录(App Router)
✗ 检测到pages/目录 - 请迁移至App Router
✓ 检测到proxy.ts
✗ 检测到middleware.ts - 请迁移至proxy.ts
模式检查:
✓ 使用服务端组件
✗ 在2个文件中检测到getServerSideProps
✓ 使用next/navigation
配置检查:
✓ next.config.ts(TypeScript格式)
✓ Turbopack已启用(默认配置)
总结: 发现2个问题
- 将pages/目录迁移至app/目录
- 将middleware.ts替换为proxy.tsMigration Guide
迁移指南
From middleware.ts to proxy.ts
从middleware.ts迁移至proxy.ts
Before (v15):
typescript
// middleware.ts
import { NextResponse } from 'next/server';
export function middleware(request) {
// Edge runtime
return NextResponse.next();
}
export const config = {
matcher: ['/dashboard/:path*'],
};After (v16):
typescript
// proxy.ts
import { createProxy } from 'next/proxy';
export const proxy = createProxy({
// Node.js runtime
async handle(request) {
// Full Node.js APIs available
return request;
},
matcher: ['/dashboard/:path*'],
});迁移前(v15):
typescript
// middleware.ts
import { NextResponse } from 'next/server';
export function middleware(request) {
// Edge 运行时
return NextResponse.next();
}
export const config = {
matcher: ['/dashboard/:path*'],
};迁移后(v16):
typescript
// proxy.ts
import { createProxy } from 'next/proxy';
export const proxy = createProxy({
// Node.js 运行时
async handle(request) {
// 可使用完整的Node.js API
return request;
},
matcher: ['/dashboard/:path*'],
});From getServerSideProps to Server Components
从getServerSideProps迁移至服务端组件
Before:
typescript
// pages/dashboard.tsx
export async function getServerSideProps() {
const data = await fetchData();
return { props: { data } };
}
export default function Dashboard({ data }) {
return <View data={data} />;
}After:
typescript
// app/dashboard/page.tsx
export default async function Dashboard() {
const data = await fetchData();
return <View data={data} />;
}迁移前:
typescript
// pages/dashboard.tsx
export async function getServerSideProps() {
const data = await fetchData();
return { props: { data } };
}
export default function Dashboard({ data }) {
return <View data={data} />;
}迁移后:
typescript
// app/dashboard/page.tsx
export default async function Dashboard() {
const data = await fetchData();
return <View data={data} />;
}CI/CD Integration
CI/CD 集成
yaml
undefinedyaml
undefined.github/workflows/validate.yml
.github/workflows/validate.yml
- name: Validate Next.js 16
run: |
python3 ~/.claude/skills/nextjs-validator/scripts/validate.py
--root .
--strict
--ci
undefined- name: Validate Next.js 16
run: |
python3 ~/.claude/skills/nextjs-validator/scripts/validate.py
--root .
--strict
--ci
undefinedIntegration
集成工具
- - Validate Tailwind v4 config
tailwind-validator - - Validate Biome 2.3+ config
biome-validator - - Validate Clerk auth setup
clerk-validator
- - 验证Tailwind v4配置
tailwind-validator - - 验证Biome 2.3+配置
biome-validator - - 验证Clerk认证设置
clerk-validator