nextjs-validator
41
总安装量
41
周安装量
#5061
全站排名
安装命令
npx skills add https://github.com/shipshitdev/library --skill nextjs-validator
Agent 安装分布
claude-code
29
gemini-cli
29
codex
29
antigravity
28
cursor
26
opencode
26
Skill 文档
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.
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
Quick Start
python3 ~/.claude/skills/nextjs-validator/scripts/validate.py --root .
python3 ~/.claude/skills/nextjs-validator/scripts/validate.py --root . --strict
What Gets Checked
1. Package Version
// GOOD: v16+
"next": "^16.0.0"
// BAD: v15 or earlier
"next": "^15.0.0"
2. Proxy vs Middleware
GOOD – Next.js 16:
// proxy.ts (Node.js runtime - REQUIRED)
import { createProxy } from 'next/proxy';
export const proxy = createProxy();
BAD – Deprecated:
// middleware.ts (Edge runtime - DEPRECATED)
export function middleware() { }
3. App Router Structure
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/
4. Cache Components & use cache
GOOD – Next.js 16:
// app/dashboard/page.tsx
'use cache';
export default async function Dashboard() {
const data = await fetch('/api/data');
return <DashboardView data={data} />;
}
5. Server Actions
GOOD:
// app/actions.ts
'use server';
export async function createItem(formData: FormData) {
// Server-side logic
}
6. Turbopack Configuration
GOOD – Default in Next.js 16:
// next.config.ts (Turbopack is default, no config needed)
BAD – Disabling Turbopack:
// Don't disable unless absolutely necessary
experimental: {
turbo: false // BAD
}
7. Config File Format
GOOD – TypeScript config:
// next.config.ts
import type { NextConfig } from 'next';
const config: NextConfig = {
// ...
};
export default config;
BAD – JavaScript config:
// next.config.js - Prefer .ts
module.exports = { }
Deprecated Patterns to Avoid
| Deprecated (v15-) | Replacement (v16+) |
|---|---|
middleware.ts |
proxy.ts |
getServerSideProps |
Server Components + use cache |
getStaticProps |
Server Components + use cache |
getStaticPaths |
generateStaticParams |
_app.tsx |
app/layout.tsx |
_document.tsx |
app/layout.tsx |
pages/ directory |
app/ directory |
next/router |
next/navigation |
useRouter() (pages) |
useRouter() from next/navigation |
Next.js 16 Features to Use
Cache Components
'use cache';
// Entire component cached
export default async function CachedPage() {
const data = await fetchData();
return <View data={data} />;
}
Partial Pre-Rendering (PPR)
// next.config.ts
const config: NextConfig = {
experimental: {
ppr: true,
},
};
Next.js DevTools MCP
AI-assisted debugging with contextual insight:
// Enable in development
// Works with Claude Code and other MCP-compatible tools
Parallel Routes
app/
âââ @modal/
â âââ login/
â âââ page.tsx
âââ @sidebar/
â âââ default.tsx
âââ layout.tsx
Intercepting Routes
app/
âââ feed/
â âââ page.tsx
âââ photo/
â âââ [id]/
â âââ page.tsx
âââ @modal/
âââ (.)photo/
âââ [id]/
âââ page.tsx
Validation 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
Migration Guide
From middleware.ts to proxy.ts
Before (v15):
// middleware.ts
import { NextResponse } from 'next/server';
export function middleware(request) {
// Edge runtime
return NextResponse.next();
}
export const config = {
matcher: ['/dashboard/:path*'],
};
After (v16):
// 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*'],
});
From getServerSideProps to Server Components
Before:
// pages/dashboard.tsx
export async function getServerSideProps() {
const data = await fetchData();
return { props: { data } };
}
export default function Dashboard({ data }) {
return <View data={data} />;
}
After:
// app/dashboard/page.tsx
export default async function Dashboard() {
const data = await fetchData();
return <View data={data} />;
}
CI/CD Integration
# .github/workflows/validate.yml
- name: Validate Next.js 16
run: |
python3 ~/.claude/skills/nextjs-validator/scripts/validate.py \
--root . \
--strict \
--ci
Integration
tailwind-validator– Validate Tailwind v4 configbiome-validator– Validate Biome 2.3+ configclerk-validator– Validate Clerk auth setup