当前位置: 首页 > web >正文

Vue 项目命名规范指南

📚 Vue 项目命名规范指南(适用于 Vue 3 + Pinia + Vue Router)

目的:统一命名风格,提升可读性、可维护性和团队协作效率。


一、通用原则

类型命名风格示例
变量camelCaseuserName, isLoading
常量UPPER_SNAKE_CASEMAX_RETRY_COUNT, DEFAULT_TIMEOUT
函数/方法camelCasefetchData, validateForm
类 / 组件 / 枚举 / 路由 namePascalCaseUserProfile, ErrorBoundary
自定义指令(Vue)kebab-casev-focus, v-tooltip
URL 路径kebab-case/user-profile, /settings/account

二、组件相关命名规范

1. 组件文件名

  • 使用 PascalCaseKebabCase
  • 推荐使用 PascalCase,便于在 JS 中直接引用。
components/UserProfile.vue        ✅ 推荐userProfile.vue        ❌ 不推荐(容易与变量混淆)user-profile.vue       ✅ 在模板中使用时推荐

2. 组件注册与使用

  • 注册时使用 PascalCase:
import UserProfile from './components/UserProfile.vue'
  • 模板中使用 kebab-case:
<template><user-profile :user="user" />
</template>

3. Props 命名(组件间传参)

  • 使用 camelCase(JS 中),模板中用 kebab-case。
  • 避免缩写(除非是通用缩写如 id, url)。
props: {userName: String,isActive: Boolean,userId: Number
}
<template><UserCard :user-name="name" :is-active="true" />
</template>

三、Vue Router 相关命名规范

1. 路由路径(URL)

  • 使用 kebab-case,清晰表达资源结构。
{path: '/user-profile',name: 'UserProfile',component: () => import('../views/UserProfile.vue')
}

2. 路由名称(name)

  • 使用 PascalCase,与组件名保持一致。
name: 'UserProfile'

3. 动态参数命名

  • 参数名使用 kebab-case(URL),JS 中访问使用 camelCase。
path: '/user/:user_id' // URL 中使用
$route.params.userId    // JS 中自动转为 camelCase

四、Pinia 状态管理命名规范

1. Store 文件名

  • 使用小驼峰命名,以 .store.js.store.ts 结尾。
stores/userStore.jscartStore.js

2. State 属性命名

  • 使用 camelCase,语义明确。
state: () => ({user: null,isLoading: false,activeTab: 'dashboard'
})

3. Actions 命名

  • 动词开头 + 名词,表示动作。
actions: {async fetchUser(userId) {},updateUser(userData) {}
}

4. Getters 命名

  • 名词或形容词为主,表示派生状态。
getters: {isLoggedIn: (state) => !!state.user,fullName: (state) => `${state.firstName} ${state.lastName}`
}

五、变量与函数命名规范

1. 变量命名

  • 使用 camelCase。
  • 避免模糊命名(如 data, info),应具体说明用途。
let currentUser = null;
let loadingCount = 0;

2. 函数命名

  • 动词开头,描述行为。
function validateForm() {}
function submitData(data) {}

3. 布尔类型变量命名

  • is, has, should 开头。
let isActive = false;
let hasPermission = true;

六、常量命名规范

  • 使用全大写 + 下划线分隔。
  • 通常用于配置项、枚举、固定值等。
const MAX_RETRY_COUNT = 3;
const USER_ROLES = ['admin', 'editor', 'viewer'];

七、事件命名规范(Vue 组件通信)

  • 使用 kebab-case,在子组件中 $emit 时使用:
this.$emit('update:loading', false);
  • 在父组件中监听:
<template><ChildComponent @update:loading="handleLoadingChange" />
</template>

八、自定义指令命名规范

  • 使用 kebab-case,符合 HTML 规范。
app.directive('focus', {mounted(el) {el.focus();}
});

使用方式:

<input v-focus />

九、样式类命名建议(可选)

  • 推荐使用 BEM 风格或 CSS-in-JS 工具。
  • 如果使用 SCSS/CSS,建议命名清晰:
.user-card {}
.user-card__header {}
.user-card--active {}

十、模块化命名建议

如果你的项目采用模块化结构(如多个 store、路由模块、功能模块),建议在命名中加入上下文前缀。

示例:

类型示例
StoreuserStore.js, productStore.js
路由模块userRoutes.js, orderRoutes.js
组件UserList.vue, UserDetail.vue

十一、附录:命名风格总结表

类型命名风格示例
组件名PascalCaseUserProfile.vue
模板标签kebab-case<user-profile />
PropscamelCase(JS) / kebab-case(模板)userName, user-name
路由 namePascalCase'UserProfile'
路由路径kebab-case/user-profile
动态路由参数kebab-case(URL) / camelCase(JS):user_idparams.userId
变量camelCaseuserName, isLoading
常量UPPER_SNAKE_CASEMAX_RETRY_COUNT
函数camelCasefetchData, submitForm
布尔变量is/has/should + 描述isActive, hasPermission
Pinia statecamelCaseuser, cartItems
Pinia actions动词 + 名词fetchUser, addToCart
Pinia getters名词/形容词isLoggedIn, totalPrice
自定义指令kebab-casev-focus

十二、工具建议(可选)

  • 使用 ESLint 和 Prettier 来自动格式化和校验命名风格。
  • 使用 Vue Language Features (Volar) 提升 Vue 开发体验。
  • 使用 TypeScript 增强类型安全和命名一致性。

✅ 总结

一个良好的命名规范能显著提升代码质量与团队协作效率。建议将此文档纳入项目初期的技术规范文档,并结合 ESLint/Prettier 工具进行自动化检查。

http://www.xdnf.cn/news/10167.html

相关文章:

  • 操作系统原理第9章 磁盘存储器管理 重点内容
  • JAVA:抽象类和接口
  • AI书签管理工具开发全记录(五):后端服务搭建与API实现
  • OSG编译wasm尝试
  • PostgreSQL部署
  • PyCharm接入DeepSeek,实现高效AI编程
  • Python中函数知识详解和示例
  • 正则化-深度学习
  • 2011肠衣问题
  • 视频压制(Video Encoding/Compression)
  • 20250530-C#知识:String与StringBuilder
  • dify账号与基础模型配置
  • RK3568项目(四)--uboot启动流程之启动模式选择
  • PPIO × AstrBot:多平台接入聊天机器人,开启高效协同 | 教程
  • 封装一个Qt调用动态库的类
  • LLM enhanced VRP
  • 根据面包屑的展开与隐藏控制样式
  • 告别充电焦虑:移动充电桩如何优化传统充电模式?
  • 湖北理元理律师事务所:债务优化服务的流程透明度建设
  • 【NLP入门系列一】NLP概述和独热编码
  • 手撕Java+硅基流动实现MCP服务器教程
  • 【Oracle】DML语言
  • AI+爆款文案,提示词脚本 ——卫朋
  • Linux之锁
  • 数据结构与算法之中缀表达式的求值
  • mapbox高阶,PMTiles介绍,MBTiles、PMTiles对比,加载PMTiles文件
  • SSE流式输出使用POST 请求
  • WSP 对CSV文件中E+如何恢复可用方案
  • Hash 的工程优势: port range 匹配
  • 可视化与动画:构建沉浸式Vue应用的进阶实践