用于创建或审查 Nuxt 3 项目、文件路由、pages、layouts、SSR/SSG/SPA 行为、Nuxt 数据获取、route middleware、plugins、modules、server routes 或 Nuxt 特定 Vue 3 约定。通用 Vue 组件架构另按项目 Vue 约定处理;中文触发词包括 Nuxt、Nuxt 3。
Scanned 9/3/2026
Install to Claude Code
npx -y skills add bovinphang/frontend-craft --skill fec-nuxt-project-standard --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Fec Nuxt Project Standard?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/bovinphang-fec-nuxt-project-standard-frontend-craft)More formats (shields.io, HTML) on the badges page.
---
name: fec-nuxt-project-standard
description: 用于创建或审查 Nuxt 3 项目、文件路由、pages、layouts、SSR/SSG/SPA 行为、Nuxt 数据获取、route middleware、plugins、modules、server routes 或 Nuxt 特定 Vue 3 约定。通用 Vue 组件架构另按项目 Vue 约定处理;中文触发词包括 Nuxt、Nuxt 3。
---
# Nuxt 3 项目规范
适用于使用 Nuxt 3 + Vue 3 + TypeScript 的仓库。
## 用途
规范 Nuxt 3 项目中 SSR/SSG 渲染模式、组合式 API、自动导入、数据获取、路由中间件和模块插件的工程实践,确保约定式开发和类型安全。
## 流程
1. 先识别目标属于 Nuxt pages/layouts、渲染模式、数据获取、route middleware、plugin/module 还是 server route。
2. 明确 SSR / SSG / SPA 选择,避免服务端可执行代码依赖 `window` 或 `document`。
3. 数据获取优先使用 Nuxt 的 `useFetch` / `useAsyncData`,并检查水合一致性。
4. 路由鉴权、redirect 和权限问题与路由保护 workflow 对齐。
5. 通用 Vue 组件架构问题分流到 Vue 项目 workflow。
## 项目结构
```
├── app.vue # 根组件
├── nuxt.config.ts # Nuxt 配置
│
├── pages/ # 基于文件的路由
│ ├── index.vue # /
│ ├── login.vue # /login
│ ├── dashboard/
│ │ ├── index.vue # /dashboard
│ │ └── users/
│ │ ├── index.vue # /dashboard/users
│ │ └── [id].vue # /dashboard/users/:id
│ └── [...slug].vue # 捕获所有
│
├── layouts/ # 布局
│ ├── default.vue
│ └── auth.vue
│
├── components/ # 自动导入组件
│ ├── Button/
│ │ └── Button.vue
│ └── AppHeader.vue
│
├── composables/ # 组合式函数(自动导入)
│ ├── useAuth.ts
│ └── useFetch.ts
│
├── server/ # 服务端 API
│ ├── api/ # API 路由
│ │ └── users/
│ │ └── index.get.ts
│ ├── middleware/ # 服务端中间件
│ └── utils/ # 服务端工具
│
├── plugins/ # 插件
│ └── i18n.client.ts
│
├── middleware/ # 路由中间件
│ └── auth.ts
│
├── public/ # 静态资源
├── assets/ # 需构建的资源
└── types/ # 类型定义
```
## 渲染模式
| 模式 | 配置 | 说明 |
| ------- | --------------- | -------------- |
| **SSR** | 默认 | `ssr: true` |
| **SSG** | `nuxt generate` | 预渲染所有页面 |
| **SPA** | `ssr: false` | 纯客户端渲染 |
```ts
// nuxt.config.ts
export default defineNuxtConfig({
ssr: true, // 或 false
});
```
## 数据获取
- `useFetch` / `useAsyncData`:服务端 + 客户端,自动去重
- `$fetch`:直接请求,适合服务端或一次性调用
- `useLazyAsyncData`:不阻塞导航,适合非首屏
- 避免在 `setup` 顶层混用同步/异步逻辑导致水合不匹配
## 路由与布局
- `pages/` 下文件自动生成路由
- 动态路由:`[id].vue`、`[...slug].vue`
- 布局:`layout` 选项或 `layouts/default.vue` 默认
- 嵌套路由:`pages/parent/child.vue` 需配合 `NuxtPage`
## 中间件
- `middleware/` 下文件自动注册
- 页面级:`definePageMeta({ middleware: ['auth'] })`
- 全局:`nuxt.config.ts` 的 `router.middleware`
- 服务端中间件:`server/middleware/`
## 插件与模块
- 插件:`plugins/*.ts`,支持 `.client`、`.server` 后缀
- 模块:`modules/` 或 `node_modules`,在 `nuxt.config` 中 `modules: []`
## 约束
- 服务端可访问的代码不要依赖 `window`、`document`
- 使用 `useState` 共享状态时注意 SSR 序列化
- 图片使用 `NuxtImg`,链接使用 `NuxtLink`
- 避免在 `setup` 顶层使用 `await` 导致阻塞,优先用 `useAsyncData` / `useFetch`
## 预期输出
- 页面按 `pages/` 约定式路由组织,动态路由正确配置
- 渲染模式(SSR/SSG/SPA)选择正确,`nuxt.config.ts` 配置清晰
- 数据获取使用 `useFetch` / `useAsyncData`,自动去重和水合
- Composables 和组件自动导入正确,服务端/客户端边界清晰
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!