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

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.lryc.cn/news/2395481.html

相关文章:

  • 【笔记】开源通用人工智能代理 Suna 部署全流程准备清单(Windows 系统)
  • 海康工业相机SDK二次开发(VS+QT+海康SDK+C++)
  • 前端面试准备-5
  • Spring Boot 启动流程深度解析:从源码到实践
  • 深度学习|pytorch基本运算-乘除法和幂运算
  • 嵌入式通用集成电路卡市场潜力报告:物联网浪潮下的机遇与挑战剖析
  • 4.2.4 Spark SQL 数据写入模式
  • 论文笔记: Urban Region Embedding via Multi-View Contrastive Prediction
  • Android 缓存应用冻结器(Cached Apps Freezer)
  • 初学者如何微调大模型?从0到1详解
  • 西瓜书第十一章——降维与度量学习
  • Portainer安装指南:多节点监控的docker管理面板-家庭云计算专家
  • NanoGPT的BenchMarking.py
  • 测试用例及黑盒测试方法
  • CentOS 7 环境下部署 LAMP
  • vscode实用配置
  • React 项目中封装 Excel 导入导出组件:技术分享与实践
  • 【PhysUnits】15.1 引入P1后的加一特质(add1.rs)
  • 【2025CCF中国开源大会】RISC-V 开源生态的挑战与机遇分论坛重磅来袭!共探开源芯片未来
  • python完成批量复制Excel文件并根据另一个Excel文件中的名称重命名
  • Vue-2-前端框架Vue基础入门之二
  • CPT208 Human-Centric Computing 人机交互 Pt.7 交互和交互界面
  • ubuntu20.04.5-arm64版安装robotjs
  • [网页五子棋][匹配模块]前后端交互接口(消息推送机制)、客户端开发(匹配页面、匹配功能)
  • 【数据分析】Matplotlib+Pandas+Seaborn绘图
  • NLP学习路线图(十五):TF-IDF(词频-逆文档频率)
  • [Redis] Redis命令在Pycharm中的使用
  • openpnp - 给M4x0.7mm的直油嘴加油的工具选择
  • Azure Devops 系列之三- vscode部署function app
  • EasyExcel复杂Excel导出