nuxt4-patterns — скилл для Claude: паттерны Nuxt 4
Скилл для работы с Nuxt 4: гидратация, route rules, ленивая загрузка и SSR-безопасный сбор данных через useFetch и useAsyncData.
npx skills add affaan-m/ECC --skill nuxt4-patterns -a claude-codeЧто делает nuxt4-patterns
Скилл описывает, как писать и проверять приложения на Nuxt 4. Внутри — разделы про безопасную гидратацию, сбор данных, route rules, ленивую загрузку и чек-лист для ревью. Агент подключает эти правила, когда вы собираете или разбираете Nuxt 4 проект, ловите расхождения между серверной разметкой и клиентским состоянием или настраиваете рендеринг по маршрутам.
По гидратации скилл требует детерминированного первого рендера: Date.now(), Math.random(), браузерные API и чтение storage не должны попадать в SSR-шаблон напрямую. Логику для браузера он советует уводить в onMounted(), import.meta.client, ClientOnly или компонент .client.vue. Для данных — await useFetch() в страницах и компонентах, useAsyncData() со стабильным ключом, когда фетчер сложнее обычного $fetch(). Для некритичных данных — lazy: true, useLazyFetch() или useLazyAsyncData() с обработкой status === 'pending'.
Route rules задаются в nuxt.config.ts по группам маршрутов: prerender, swr, isr, ssr: false, cache или redirect. Скилл прямо говорит не размазывать одну стратегию на весь сайт. Ставить его стоит, если у вас Nuxt 4 с SSR или гибридным рендерингом. Если проект на другой версии или рендерится только на клиенте, пользы почти не будет.
Какие задачи решает
- убрать расхождения между серверным HTML и клиентским состоянием
- выбрать стратегию рендеринга для группы маршрутов
- перевести сбор данных страницы на useFetch вместо $fetch верхнего уровня
- отложить загрузку некритичных данных и показать статус ожидания
- уменьшить payload и разбить тяжёлые интерактивные блоки
Примеры запросов агенту
- Проверь мою Nuxt 4 страницу на hydration mismatches
- Настрой routeRules для /products/** и /blog/**
- Перепиши загрузку данных на useAsyncData со стабильным ключом
Как установить nuxt4-patterns
1Через Skills CLI (Vercel)
npx skills add affaan-m/ECC --skill nuxt4-patterns -a claude-code2Вручную: положить файлы
~/.claude/skills/nuxt4-patterns/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/nuxt4-patterns/
1Через Skills CLI (Vercel)
npx skills add affaan-m/ECC --skill nuxt4-patterns -a codex2Вручную: положить файлы
.agents/skills/nuxt4-patterns/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add affaan-m/ECC --skill nuxt4-patterns -a cursor2Вручную: положить файлы
.cursor/skills/nuxt4-patterns/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install affaan-m/ECC nuxt4-patterns2Вручную: положить файлы
.github/skills/nuxt4-patterns/SKILL.md1Через Skills CLI (Vercel)
npx skills add affaan-m/ECC --skill nuxt4-patterns -a gemini-cli2Командой платформы
gemini skills install https://github.com/affaan-m/ECC --path skills/nuxt4-patternsВручную: положить файлы
.devin/skills/nuxt4-patterns/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add affaan-m/ECC --skill nuxt4-patterns -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
Из того же набора146
Весь набор →Похожие
Вопросы о nuxt4-patterns
Как установить nuxt4-patterns в Claude?
Выполните npx skills add affaan-m/ECC --skill nuxt4-patterns -a claude-code. Файл скилла окажется в ~/.claude/skills/nuxt4-patterns/SKILL.md.
Что делает nuxt4-patterns?
Даёт агенту правила по гидратации, сбору данных, route rules и ленивой загрузке в Nuxt 4. Он применяет их при написании и ревью страниц.
Когда скилл включается сам?
При отладке hydration mismatches, работе с useFetch и useAsyncData, настройке route rules и задачах по ленивой загрузке или размеру payload.
Исходный текст
SKILL.md · MIT
---
name: nuxt4-patterns
description: Nuxt 4 app patterns for hydration safety, performance, route rules, lazy loading, and SSR-safe data fetching with useFetch and useAsyncData. Use when building or reviewing a Nuxt 4 app, or debugging hydration mismatches and SSR-safe data fetching.
metadata:
origin: ECC
---
# Nuxt 4 Patterns
Use when building or debugging Nuxt 4 apps with SSR, hybrid rendering, route rules, or page-level data fetching.
## When to Activate
- Hydration mismatches between server HTML and client state
- Route-level rendering decisions such as prerender, SWR, ISR, or client-only sections
- Performance work around lazy loading, lazy hydration, or payload size
- Page or component data fetching with `useFetch`, `useAsyncData`, or `$fetch`
- Nuxt routing issues tied to route params, middleware, or SSR/client differences
## Hydration Safety
- Keep the first render deterministic. Do not put `Date.now()`, `Math.random()`, browser-only APIs, or storage reads directly into SSR-rendered template state.
- Move browser-only logic behind `onMounted()`, `import.meta.client`, `ClientOnly`, or a `.client.vue` component when the server cannot produce the same markup.
- Use Nuxt's `useRoute()` composable, not the one from `vue-router`.
- Do not use `route.fullPath` to drive SSR-rendered markup. URL fragments are client-only, which can create hydration mismatches.
- Treat `ssr: false` as an escape hatch for truly browser-only areas, not a default fix for mismatches.
## Data Fetching
- Prefer `await useFetch()` for SSR-safe API reads in pages and components. It forwards server-fetched data into the Nuxt payload and avoids a second fetch on hydration.
- Use `useAsyncData()` when the fetcher is not a simple `$fetch()` call, when you need a custom key, or when you are composing multiple async sources.
- Give `useAsyncData()` a stable key for cache reuse and predictable refresh behavior.
- Keep `useAsyncData()` handlers side-effect free. They can run during SSR and hydration.
- Use `$fetch()` for user-triggered writes or client-only actions, not top-level page data that should be hydrated from SSR.
- Use `lazy: true`, `useLazyFetch()`, or `useLazyAsyncData()` for non-critical data that should not block navigation. Handle `status === 'pending'` in the UI.
- Use `server: false` only for data that is not needed for SEO or the first paint.
- Trim payload size with `pick` and prefer shallower payloads when deep reactivity is unnecessary.
```ts
const route = useRoute()
const { data: article, status, error, refresh } = await useAsyncData(
() => `article:${route.params.slug}`,
() => $fetch(`/api/articles/${route.params.slug}`),
)
const { data: comments } = await useFetch(`/api/articles/${route.params.slug}/comments`, {
lazy: true,
server: false,
})
```
## Route Rules
Prefer `routeRules` in `nuxt.config.ts` for rendering and caching strategy:
```ts
export default defineNuxtConfig({
routeRules: {
'/': { prerender: true },
'/products/**': { swr: 3600 },
'/blog/**': { isr: true },
'/admin/**': { ssr: false },
'/api/**': { cache: { maxAge: 60 * 60 } },
},
})
```
- `prerender`: static HTML at build time
- `swr`: serve cached content and revalidate in the background
- `isr`: incremental static regeneration on supported platforms
- `ssr: false`: client-rendered route
- `cache` or `redirect`: Nitro-level response behavior
Pick route rules per route group, not globally. Marketing pages, catalogs, dashboards, and APIs usually need different strategies.
## Lazy Loading and Performance
- Nuxt already code-splits pages by route. Keep route boundaries meaningful before micro-optimizing component splits.
- Use the `Lazy` prefix to dynamically import non-critical components.
- Conditionally render lazy components with `v-if` so the chunk is not loaded until the UI actually needs it.
- Use lazy hydration for below-the-fold or non-critical interactive UI.
```vue
<template>
<LazyRecommendations v-if="showRecommendations" />
<LazyProductGallery hydrate-on-visible />
</template>
```
- For custom strategies, use `defineLazyHydrationComponent()` with a visibility or idle strategy.
- Nuxt lazy hydration works on single-file components. Passing new props to a lazily hydrated component will trigger hydration immediately.
- Use `NuxtLink` for internal navigation so Nuxt can prefetch route components and generated payloads.
## Review Checklist
- First SSR render and hydrated client render produce the same markup
- Page data uses `useFetch` or `useAsyncData`, not top-level `$fetch`
- Non-critical data is lazy and has explicit loading UI
- Route rules match the page's SEO and freshness requirements
- Heavy interactive islands are lazy-loaded or lazily hydrated
© affaan-m · MIT · affaan-m/ECC