Vue項(xiàng)目命名規(guī)范指南分享
Vue項(xiàng)目命名規(guī)范指南(適用于 Vue 3 + Pinia + Vue Router)
目的:統(tǒng)一命名風(fēng)格,提升可讀性、可維護(hù)性和團(tuán)隊(duì)協(xié)作效率。
一、通用原則
| 類(lèi)型 | 命名風(fēng)格 | 示例 |
|---|---|---|
| 變量 | camelCase | userName, isLoading |
| 常量 | UPPER_SNAKE_CASE | MAX_RETRY_COUNT, DEFAULT_TIMEOUT |
| 函數(shù)/方法 | camelCase | fetchData, validateForm |
| 類(lèi) / 組件 / 枚舉 / 路由 name | PascalCase | UserProfile, ErrorBoundary |
| 自定義指令(Vue) | kebab-case | v-focus, v-tooltip |
| URL 路徑 | kebab-case | /user-profile, /settings/account |
二、組件相關(guān)命名規(guī)范
1. 組件文件名
- 使用 PascalCase 或 KebabCase。
- 推薦使用 PascalCase,便于在 JS 中直接引用。
components/ UserProfile.vue ? 推薦 userProfile.vue ? 不推薦(容易與變量混淆) user-profile.vue ? 在模板中使用時(shí)推薦
2. 組件注冊(cè)與使用
- 注冊(cè)時(shí)使用 PascalCase:
import UserProfile from './components/UserProfile.vue'
- 模板中使用 kebab-case:
<template> <user-profile :user="user" /> </template>
3. Props 命名(組件間傳參)
- 使用 camelCase(JS 中),模板中用 kebab-case。
- 避免縮寫(xiě)(除非是通用縮寫(xiě)如
id,url)。
props: {
userName: String,
isActive: Boolean,
userId: Number
}
<template> <UserCard :user-name="name" :is-active="true" /> </template>
三、Vue Router 相關(guān)命名規(guī)范
1. 路由路徑(URL)
- 使用 kebab-case,清晰表達(dá)資源結(jié)構(gòu)。
{
path: '/user-profile',
name: 'UserProfile',
component: () => import('../views/UserProfile.vue')
}
2. 路由名稱(chēng)(name)
- 使用 PascalCase,與組件名保持一致。
name: 'UserProfile'
3. 動(dòng)態(tài)參數(shù)命名
- 參數(shù)名使用 kebab-case(URL),JS 中訪問(wèn)使用 camelCase。
path: '/user/:user_id' // URL 中使用 $route.params.userId // JS 中自動(dòng)轉(zhuǎn)為 camelCase
四、Pinia 狀態(tài)管理命名規(guī)范
1. Store 文件名
- 使用小駝峰命名,以
.store.js或.store.ts結(jié)尾。
stores/ userStore.js cartStore.js
2. State 屬性命名
- 使用 camelCase,語(yǔ)義明確。
state: () => ({
user: null,
isLoading: false,
activeTab: 'dashboard'
})
3. Actions 命名
- 動(dòng)詞開(kāi)頭 + 名詞,表示動(dòng)作。
actions: {
async fetchUser(userId) {},
updateUser(userData) {}
}
4. Getters 命名
- 名詞或形容詞為主,表示派生狀態(tài)。
getters: {
isLoggedIn: (state) => !!state.user,
fullName: (state) => `${state.firstName} ${state.lastName}`
}
五、變量與函數(shù)命名規(guī)范
1. 變量命名
- 使用 camelCase。
- 避免模糊命名(如
data,info),應(yīng)具體說(shuō)明用途。
let currentUser = null; let loadingCount = 0;
2. 函數(shù)命名
- 動(dòng)詞開(kāi)頭,描述行為。
function validateForm() {}
function submitData(data) {}
3. 布爾類(lèi)型變量命名
- 以
is,has,should開(kāi)頭。
let isActive = false; let hasPermission = true;
六、常量命名規(guī)范
- 使用全大寫(xiě) + 下劃線分隔。
- 通常用于配置項(xiàng)、枚舉、固定值等。
const MAX_RETRY_COUNT = 3; const USER_ROLES = ['admin', 'editor', 'viewer'];
七、事件命名規(guī)范(Vue 組件通信)
- 使用 kebab-case,在子組件中
$emit時(shí)使用:
this.$emit('update:loading', false);
- 在父組件中監(jiān)聽(tīng):
<template> <ChildComponent @update:loading="handleLoadingChange" /> </template>
八、自定義指令命名規(guī)范
- 使用 kebab-case,符合 HTML 規(guī)范。
app.directive('focus', {
mounted(el) {
el.focus();
}
});
使用方式:
<input v-focus />
九、樣式類(lèi)命名建議(可選)
- 推薦使用 BEM 風(fēng)格或 CSS-in-JS 工具。
- 如果使用 SCSS/CSS,建議命名清晰:
.user-card {}
.user-card__header {}
.user-card--active {}
十、模塊化命名建議
如果你的項(xiàng)目采用模塊化結(jié)構(gòu)(如多個(gè) store、路由模塊、功能模塊),建議在命名中加入上下文前綴。
示例:
| 類(lèi)型 | 示例 |
|---|---|
| Store | userStore.js, productStore.js |
| 路由模塊 | userRoutes.js, orderRoutes.js |
| 組件 | UserList.vue, UserDetail.vue |
十一、附錄:命名風(fēng)格總結(jié)表
| 類(lèi)型 | 命名風(fēng)格 | 示例 |
|---|---|---|
| 組件名 | PascalCase | UserProfile.vue |
| 模板標(biāo)簽 | kebab-case | <user-profile /> |
| Props | camelCase(JS) / kebab-case(模板) | userName, user-name |
| 路由 name | PascalCase | 'UserProfile' |
| 路由路徑 | kebab-case | /user-profile |
| 動(dòng)態(tài)路由參數(shù) | kebab-case(URL) / camelCase(JS) | :user_id → params.userId |
| 變量 | camelCase | userName, isLoading |
| 常量 | UPPER_SNAKE_CASE | MAX_RETRY_COUNT |
| 函數(shù) | camelCase | fetchData, submitForm |
| 布爾變量 | is/has/should + 描述 | isActive, hasPermission |
| Pinia state | camelCase | user, cartItems |
| Pinia actions | 動(dòng)詞 + 名詞 | fetchUser, addToCart |
| Pinia getters | 名詞/形容詞 | isLoggedIn, totalPrice |
| 自定義指令 | kebab-case | v-focus |
十二、工具建議(可選)
- 使用 ESLint 和 Prettier 來(lái)自動(dòng)格式化和校驗(yàn)命名風(fēng)格。
- 使用 Vue Language Features (Volar) 提升 Vue 開(kāi)發(fā)體驗(yàn)。
- 使用 TypeScript 增強(qiáng)類(lèi)型安全和命名一致性。
總結(jié)
一個(gè)良好的命名規(guī)范能顯著提升代碼質(zhì)量與團(tuán)隊(duì)協(xié)作效率。建議將此文檔納入項(xiàng)目初期的技術(shù)規(guī)范文檔,并結(jié)合 ESLint/Prettier 工具進(jìn)行自動(dòng)化檢查。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue + OpenLayers 快速入門(mén)學(xué)習(xí)教程
大家都知道使用 Openlayers可以很靈活自由的做出各種地圖和空間數(shù)據(jù)的展示。而且這個(gè)框架是完全免費(fèi)和開(kāi)源的,本文記錄下 Vue 使用 OpenLayers 入門(mén),使用 OpenLayers 創(chuàng)建地圖組件的相關(guān)知識(shí),需要的朋友一起學(xué)習(xí)下吧2021-09-09
Vue2.0使用嵌套路由實(shí)現(xiàn)頁(yè)面內(nèi)容切換/公用一級(jí)菜單控制頁(yè)面內(nèi)容切換(推薦)
這篇文章主要介紹了Vue2.0使用嵌套路由實(shí)現(xiàn)頁(yè)面內(nèi)容切換/公用一級(jí)菜單控制頁(yè)面內(nèi)容切換,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05
el-table樹(shù)形數(shù)據(jù)序號(hào)排序處理方案
這篇文章主要介紹了el-table樹(shù)形數(shù)據(jù)序號(hào)排序處理方案,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-03-03
Vue2.x中的父組件傳遞數(shù)據(jù)至子組件的方法
這篇文章主要介紹了Vue2.x中的父組件數(shù)據(jù)傳遞至子組件的方法,需要的朋友可以參考下2017-05-05
vue-seamless-scroll無(wú)縫滾動(dòng)組件使用方法詳解
這篇文章主要為大家詳細(xì)介紹了vue-seamless-scroll無(wú)縫滾動(dòng)組件的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
使用Vue與Fabric.js開(kāi)發(fā)一個(gè)圖片標(biāo)注工具
在現(xiàn)代的Web應(yīng)用開(kāi)發(fā)中,能夠?qū)D片進(jìn)行標(biāo)注是一項(xiàng)非常實(shí)用的功能,無(wú)論是在項(xiàng)目管理、圖像處理還是教育領(lǐng)域,這種功能都能極大提升用戶(hù)體驗(yàn),本文將介紹如何利用Vue框架結(jié)合Fabric.js庫(kù)來(lái)構(gòu)建一個(gè)具有矩形框選、箭頭繪制和文本添加功能的圖片標(biāo)注工具,需要的朋友可以參考下2026-02-02
Vue跨域請(qǐng)求問(wèn)題解決方案過(guò)程解析
這篇文章主要介紹了Vue跨域請(qǐng)求問(wèn)題解決方案過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08

