--- title: Nuxt3 代码规范 description: 这是一份提供给AI大模型的Nuxt3框架规范、编程标准,可以有效提高Cursor等大模型对Nuxt.js框架的编写能力。 date: 2025-07-12 img: https://lijue-me.oss-cn-chengdu.aliyuncs.com/20250624125918171.png navigation: icon: simple-icons:nuxtdotjs --- ## 概述 这是一份提供给AI大模型的Nuxt3框架规范、编程标准,可以有效提高Cursor等大模型对Nuxt.js框架的编写能力。 --- description: 本规则为 Nuxt.js 项目提供全面的最佳实践和编码标准,涵盖代码组织、性能、安全性、测试和常见陷阱。旨在确保 Nuxt.js 应用程序的可维护性、可扩展性和安全性。 globs: *.vue,*.js,*.ts,*.mjs,*.mts,*.jsx,*.tsx,*.config.js,*.config.ts --- - **启用 ESLint 支持:** 使用 `@nuxt/eslint` 模块来配置项目感知的 ESLint。这确保代码质量和一致性。 - 运行 `npx nuxi module add eslint` 添加模块。 - 根据需要自定义生成的 `eslint.config.mjs` 文件。 - **采用 Nuxt.js 模块:** 利用 Nuxt.js 模块来封装功能并维护干净的代码库。在实现自定义解决方案之前先探索现有模块(例如,用于服务端身份验证的 `@nuxt/auth`)。 - **约定优于配置:** 遵循 Nuxt.js 约定来简化开发和协作。除非绝对必要,否则避免偏离约定。 - **高效利用 Nuxt 布局:** 为多个页面共享的组件创建可重用布局,以确保一致性并节省开发时间。布局位于 `layouts/` 目录中。 - **使用 Pinja 管理状态:** 使用 Pinia 进行状态管理。根据功能或特性组织 store 模块,以提高可维护性。 - **将页面分解为组件:** 将页面分解为小的、可重用的组件,以增强可维护性、可测试性和可重用性。每个组件都应该有单一责任。 - **明智地利用 Nuxt 插件:** 使用 Nuxt 插件在 Vue.js 初始化之前运行代码或添加全局功能。注意插件对性能的影响。插件位于 `plugins/` 目录中。 - **针对 SEO 和性能进行优化:** 利用 Nuxt.js 的服务端渲染 (SSR) 来优化 SEO。为图片实现懒加载并优化资源以最小化初始加载时间。使用 Lighthouse 等工具识别性能瓶颈。 - **实现错误处理和验证:** 实现强大的错误处理和验证机制,以提供无缝的用户体验。使用 Nuxt.js 中间件拦截请求和响应进行错误处理和数据验证。 - **为代码编写文档:** 使用 JSDoc 等工具为组件、模块和自定义函数提供清晰简洁的文档。 - **拥抱测试:** 使用 Jest、Vue Test Utils 和 Vitest 等工具编写单元测试、集成测试和端到端测试。 ## 1. 代码组织和结构: - **目录结构:** - `components/`:可重用的 Vue 组件。 - `composables/`:可重用的组合式函数。 - `layouts/`:应用程序布局。 - `middleware/`:路由中间件。 - `pages/`:应用程序页面(路由定义)。 - `plugins/`:Nuxt.js 插件。 - `server/`:API 路由和服务端逻辑。 - `static/`:静态资源(例如,图片、字体)。 - `store/`:Pinia stores(可选,但推荐)。 - `utils/`:工具函数。 - **文件命名约定:** - 组件:`PascalCase.vue`(例如,`MyComponent.vue`) - 组合式函数:`usePascalCase.js` 或 `usePascalCase.ts`(例如,`useCounter.js`) - 布局:`kebab-case.vue`(例如,`default.vue` 或 `custom-layout.vue`) - 页面:`kebab-case.vue`(例如,`index.vue`、`about.vue`、`product-details.vue`) - 插件:`kebab-case.js` 或 `kebab-case.ts`(例如,`analytics.js`) - Stores:`kebab-case.js` 或 `kebab-case.ts`(例如,`user-store.js`) - 工具函数:`camelCase.js` 或 `camelCase.ts`(例如,`formatDate.js`) - **模块组织:** - 将相关功能分组到单独的模块中。 - 在 `nuxt.config.js` 或 `nuxt.config.ts` 中使用 `@nuxt/modules` 数组注册模块。 - 创建自定义模块来封装复杂逻辑。 - **组件架构:** - 优先使用组合而非继承。 - 对简单的 UI 元素使用函数式组件。 - 设计组件时考虑可重用性和可测试性。 - 考虑使用插槽进行灵活的组件组合。 - **代码分割:** - 利用动态导入进行基于路由的代码分割。 - 使用 `import()` 将大组件分割成更小的块。 - 使用 Webpack Bundle Analyzer 等工具分析包大小。 ## 2. 常见模式和反模式: - **设计模式:** - **组合式 API:** 使用组合式 API 来组织组件逻辑。 - **Store 模式 (Pinia):** 使用 Pinia 实现集中式状态管理系统。 - **中间件模式:** 使用中间件进行身份验证、授权和数据验证。 - **插件模式:** 为全局功能和第三方库集成创建插件。 - **推荐方法:** - **API 通信:** 在组件内使用 `useFetch` 或 `useAsyncData` 组合式函数进行 API 调用。 - **表单处理:** 利用 Vue 的内置表单处理功能与 `v-model` 和像 VeeValidate 这样的验证库。 - **身份验证:** 使用 `@nuxt/auth` 库或自定义解决方案实现安全的身份验证流程。 - **授权:** 使用中间件和 Pinia stores 实现基于角色的访问控制 (RBAC)。 - **反模式:** - **直接修改 props:** 避免从子组件直接修改父组件数据。请使用 `emit` 代替。 - **过度使用全局状态:** 将全局状态的使用限制在必要的应用程序数据上。对本地数据考虑使用组件级状态。 - **忽略错误处理:** 始终处理 API 调用和其他异步操作中的潜在错误。 - **编写过于复杂的组件:** 将大组件分解为更小、更易管理的部分。 - **状态管理最佳实践:** - **单一数据源:** 在 Pinia stores 中为应用程序状态维护单一、一致的数据源。 - **不可变性:** 将状态视为不可变的。使用函数来更新 store 而不是直接操作数据。 - **清晰的命名约定:** 为 store 模块、actions 和 mutations 使用描述性名称。 - **模块化:** 根据功能或特性将 stores 分成模块。 - **错误处理模式:** - **集中式错误处理:** 实现全局错误处理器来捕获未处理的异常。 - **错误边界:** 使用错误边界来隔离组件故障并防止级联错误。 - **用户友好的错误消息:** 为用户提供清晰和有用的错误消息。 ## 3. 性能考虑: - **优化技术:** - **懒加载:** 为图片、组件和路由实现懒加载。 - **代码分割:** 将应用程序分割成更小的块以获得更快的初始加载时间。 - **Tree Shaking:** 在构建过程中删除未使用的代码。 - **缓存:** 缓存 API 响应和静态资源以减少服务器负载。 - **图片优化:** 使用 `nuxt/image` 等工具优化图片。使用适当的图片格式(WebP)。将图片大小调整为适当大小。考虑使用 CDN 进行图片交付。 - **内存管理:** - **避免内存泄漏:** 在组件卸载时清理事件监听器和定时器。 - **使用弱引用:** 在可能的情况下对 DOM 元素使用弱引用。 - **最小化对象创建:** 避免创建不必要的对象和数组。 - **渲染优化:** - **虚拟化:** 对大列表使用虚拟化以提高渲染性能。 - **记忆化:** 记忆化昂贵的计算以避免冗余计算。有效使用 `computed` 属性以避免不必要的重新渲染。 - **防抖和节流:** 对事件处理器使用防抖和节流以减少函数调用次数。 - **包大小优化:** - **分析包大小:** 使用 Webpack Bundle Analyzer 识别大依赖项。 - **删除未使用的依赖项:** 删除未使用的依赖项以减少包大小。 - **使用更小的替代方案:** 考虑使用更小的替代方案来替代大型库。 - **优化依赖项:** 检查依赖项并确保您使用的是最高效的版本。 - **懒加载策略:** - **基于路由的懒加载:** 仅在访问相应路由时加载组件。 - **基于组件的懒加载:** 仅在组件在视口中可见时加载组件。 ## 4. 安全最佳实践: - **常见漏洞:** - **跨站脚本攻击 (XSS):** 通过正确清理用户输入和使用 Vue 的内置 HTML 转义来防止 XSS 攻击。 - **跨站请求伪造 (CSRF):** 通过实现 CSRF 令牌来防止 CSRF 攻击。 - **SQL 注入:** 避免原始 SQL 查询。使用 ORM(对象关系映射器)来防止 SQL 注入。 - **身份验证和授权缺陷:** 实现安全的身份验证和授权机制。 - **不安全的直接对象引用 (IDOR):** 实现适当的访问控制以防止对资源的未授权访问。 - **输入验证:** - **服务端验证:** 始终在服务端验证用户输入。 - **客户端验证:** 提供客户端验证以获得更好的用户体验(但不要依赖它作为验证的唯一来源)。 - **清理输入:** 清理用户输入以删除潜在的有害字符。 - **身份验证和授权模式:** - **JWT(JSON Web Tokens):** 使用 JWT 进行身份验证和授权。 - **OAuth 2.0:** 为第三方身份验证实现 OAuth 2.0。 - **基于角色的访问控制 (RBAC):** 实现 RBAC 来根据用户角色控制对资源的访问。 - **数据保护策略:** - **加密:** 对静态和传输中的敏感数据进行加密。 - **散列:** 使用强散列算法对密码和其他敏感数据进行散列。 - **数据屏蔽:** 在日志和其他非生产环境中屏蔽敏感数据。 - **安全的 API 通信:** - **HTTPS:** 始终使用 HTTPS 进行 API 通信。 - **API 速率限制:** 实现 API 速率限制以防止滥用。 - **身份验证和授权:** 对所有 API 端点要求身份验证和授权。 ## 5. 测试方法: - **单元测试:** - **测试单个组件:** 孤立地测试单个组件。 - **模拟依赖项:** 模拟外部依赖项以在测试期间隔离组件。 - **验证组件行为:** 验证组件正确渲染并按预期行为。 - **集成测试:** - **测试组件交互:** 测试组件之间的交互。 - **测试数据流:** 测试组件和 stores 之间的数据流。 - **测试 API 集成:** 测试与外部 API 的集成。 - **端到端测试:** - **模拟用户交互:** 模拟用户交互以测试应用程序的功能。 - **测试整个应用程序流程:** 从头到尾测试整个应用程序流程。 - **使用浏览器自动化工具:** 使用 Cypress 或 Playwright 等浏览器自动化工具。 - **测试组织:** - **按功能组织测试:** 按功能或特性组织测试。 - **使用描述性测试名称:** 使用描述性测试名称来清楚地说明每个测试正在测试什么。 - **保持测试隔离:** 保持测试彼此隔离以避免干扰。 - **模拟和存根:** - **使用模拟对象:** 使用模拟对象在测试期间替换外部依赖项。 - **使用存根:** 使用存根用简化版本替换复杂函数。 - **避免过度模拟:** 避免模拟太多代码,因为这会使测试效果降低。 ## 6. 常见陷阱和注意事项: - **常见错误:** - **错误的 `this` 上下文:** 注意 Vue 组件中的 `this` 上下文,使用箭头函数或 `bind` 来维护正确的上下文。 - **异步数据处理:** 使用 `async/await` 或 Promises 正确处理异步数据加载。 - **忘记取消订阅:** 在组件卸载时取消订阅事件监听器和定时器以防止内存泄漏。 - **过度使用 `forceUpdate`:** 除非绝对必要,否则避免使用 `forceUpdate`,因为它会对性能产生负面影响。 - **边缘情况:** - **服务端渲染 (SSR):** 了解客户端和服务端渲染之间的差异。 - **浏览器兼容性:** 在不同浏览器中测试应用程序以确保兼容性。 - **可访问性:** 在设计和开发应用程序时考虑可访问性。 - **版本特定问题:** - **Nuxt 2 vs Nuxt 3:** 了解 Nuxt 2 和 Nuxt 3 之间的差异。 - **Vue 2 vs Vue 3:** 了解 Vue 2 和 Vue 3 之间的差异。 - **依赖项更新:** 仔细检查依赖项更新是否存在潜在的破坏性更改。 - **兼容性问题:** - **浏览器支持:** 确保与目标浏览器兼容。 - **设备兼容性:** 在不同设备上测试应用程序。 - **操作系统兼容性:** 确保与目标操作系统兼容。 - **调试策略:** - **使用浏览器开发者工具:** 使用浏览器开发者工具检查应用程序的状态和网络活动。 - **使用 Vue Devtools:** 使用 Vue Devtools 检查 Vue 组件和数据。 - **使用日志记录:** 使用日志记录来跟踪应用程序的行为。 ## 7. 工具和环境: - **推荐的开发工具:** - **VS Code:** Visual Studio Code 是一个流行的代码编辑器,具有出色的 Vue.js 支持。 - **Vue Devtools:** Vue Devtools 是一个浏览器扩展,为 Vue.js 应用程序提供调试工具。 - **ESLint:** ESLint 是一个强制执行编码标准的代码检查器。 - **Prettier:** Prettier 是一个自动格式化代码的代码格式化器。 - **构建配置:** - **`nuxt.config.js` 或 `nuxt.config.ts`:** 在 `nuxt.config.js` 或 `nuxt.config.ts` 中配置应用程序的构建设置。 - **Webpack:** Nuxt 使用 Webpack 来打包应用程序。 - **Vite:** Nuxt 3 默认使用 Vite 来打包应用程序,提供更快的构建和开发时间。 - **代码检查和格式化:** - **ESLint:** 使用 ESLint 强制执行编码标准。 - **Prettier:** 使用 Prettier 自动格式化代码。 - **Husky:** 使用 Husky 在提交前运行代码检查器和格式化器。 - **部署最佳实践:** - **服务端渲染 (SSR):** 将应用程序部署到支持 SSR 的服务器。 - **静态站点生成 (SSG):** 为内容丰富的应用程序生成静态站点。 - **CDN:** 使用 CDN 交付静态资源。 - **CI/CD 集成:** - **持续集成 (CI):** 使用 Jenkins、GitLab CI 或 GitHub Actions 等 CI 工具自动化构建和测试过程。 - **持续部署 (CD):** 使用 CD 工具自动化部署过程。 通过遵循这些最佳实践,您可以构建强健、可维护且可扩展的 Nuxt.js 应用程序。