最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Vue3代码风格最佳实践指南
时间:2026-05-28 11:50:01 编辑:袖梨 来源:一聚教程网
Vue3项目开发需要遵循规范的目录结构和代码风格,本文将详细介绍从文件组织到组件编写的完整实践指南。
目录结构
my-vue3-project/
├── src/
│ ├── assets/ # 静态资源(图片、字体等)
│ ├── components/
│ │ ├── common/ # 通用UI组件(跨项目复用,无业务逻辑)
│ │ │ └── BaseButton.vue
│ │ └── biz/ # 通用业务组件(跨页面复用,含业务逻辑)
│ │ └── BizUserCard.vue
│ ├── composables/ # 组合式函数(可复用的状态逻辑)
│ │ └── useUser.ts
│ ├── layouts/ # 布局组件(页面整体结构)
│ │ ├── default.vue
│ │ └── components/ # 布局专用组件(仅布局层使用)
│ │ └── AppHeader.vue
│ ├── pages/ # 页面组件(路由对应,kebab-case命名)
│ │ ├── user-profile.vue
│ │ └── user/ # 页面模块
│ │ ├── list.vue
│ │ └── components/ # 页面专用组件(仅当前模块使用)
│ │ └── UserFilter.vue
│ ├── router/ # 路由配置(管理页面路由)
│ │ ├── index.ts
│ │ └── user-routes.ts
│ ├── stores/ # Pinia状态管理(全局共享状态)
│ │ └── userStore.ts
│ ├── services/ # API服务层(封装后端接口调用)
│ │ └── userService.ts
│ ├── utils/ # 工具函数(纯函数,无副作用)
│ │ ├── formatDate.ts
│ │ └── validateEmail.ts
│ ├── types/ # TypeScript类型定义(接口、枚举等)
│ │ ├── User.ts
│ │ └── api.ts
│ ├── styles/ # 全局样式(变量、混入、重置样式)
│ │ └── global.scss
│ ├── App.vue
│ └── main.ts
├── tests/
│ └── unit/ # 单元测试(与src目录结构对应)
│ ├── components/
│ └── utils/
└── package.json
文件命名规则
类型规则示例说明通用UI组件Base + PascalCaseBaseButton.vue无业务逻辑,纯UI通用业务组件Biz + PascalCaseBizUserCard.vue跨页面复用,含业务布局组件App + PascalCaseAppHeader.vue仅布局层使用页面文件kebab-caseuser-profile.vue与路由路径一致页面专用组件PascalCaseUserFilter.vue仅当前模块使用组合式函数use + camelCaseuseUser.ts逻辑复用StorecamelCase + StoreuserStore.ts全局状态ServicecamelCase + ServiceuserService.tsAPI封装工具函数camelCaseformatDate.ts纯函数类型定义PascalCaseUser.ts接口/枚举测试文件源文件名 + .spec.tsBaseButton.spec.ts单元测试
组件编写
组件分类与命名
组件类型目录命名规则示例通用UI组件components/common/Base + PascalCaseBaseButton.vue通用业务组件components/biz/Biz + PascalCaseBizUserCard.vue布局组件layouts/components/App + PascalCaseAppHeader.vue页面专用组件pages/xxx/components/PascalCaseUserFilter.vue
单文件组件结构
// 1. 类型导入
import type { UserInfo } from '@/types/User'// 2. 第三方库
import { ElMessage } from 'element-plus'// 3. 组件导入
import BaseButton from '@/components/common/BaseButton.vue'// 4. 工具/组合式函数
import { useUser } from '@/composables/useUser'// 5. Props
interface Props {
userId: string
title?: string
}
const props = withDefaults(defineProps(), {
title: '默认'
})// 6. Emits
const emit = defineEmits
相关文章
- 凌云对决手游节奏榜 凌云对决手游强势角色推荐 05-28
- 如何注册canva可画账号 05-28
- pixiv插画官网入口-Pixiv.net官方网址 05-28
- 马卡龙玩图app如何使用画笔 05-28
- 《零纪元·秩序新篇》限时活动:消费赠豪礼 排行榜激战正酣 05-28
- 东离剑游纪手游殇不患强度解析 东离剑游纪手游殇不患技能机制与实战表现 05-28