前端命名规范手册

3 阅读5分钟

🎉 前端命名规范手册
版本:1.2 | 适用于 JavaScript / TypeScript 项目(React/Vue/Node 兼容)

命名是代码的“第一文档”。好的命名让代码自解释,减少沟通成本。


🎯 目标

  • 统一团队命名风格
  • 提升代码可读性与维护性
  • 避免歧义和误解
  • 让新人快速理解项目结构

📏 一、通用原则(所有语言通用)

原则说明
🔤 使用语义化名称userNamestr1 更清晰
🐫 使用驼峰命名法(camelCase)默认规则
🧱 单词顺序:[描述][主体][类型]isLoadingUser, submitBtn, userInfoModal
❌ 不要缩写除非通用btn ✅,usrNm
✅ 英文命名禁止拼音或中英混杂

✅ 正确示例:

const userProfile = { ... };
function validateEmail() { ... }

❌ 错误示例:

const yonghu = 'zhangsan'; // 拼音
const getUserInfoByIdAndNameStr = ...; // 过长且混乱

🧩 二、按场景命名规范

1. 变量与常量

类型规范示例
普通变量camelCaseuserName, isLoading, apiClient
布尔值加前缀 is, has, can, shouldisLoading, hasPermission, canEdit, shouldRefresh
数字明确单位或含义retryCount, timeoutMs, pageSize
字符串描述内容errorMessage, apiEndpoint
常量UPPER_CASE_SNAKEMAX_RETRY_COUNT, API_BASE_URL
私有成员前缀 _(约定)_cacheData, _init()

2. 函数与方法

类型命名建议示例
普通函数动词开头fetchUser(), validateForm(), showModal()
异步函数可加 Async 后缀(可选)fetchUserAsync() 或直接用 async 关键字识别
事件处理函数handle + 事件名handleClick, handleChange, handleSubmit
回调函数on + 事件名onClick, onSuccess, onError
工具函数清晰表达功能formatDate(), deepClone(), debounce()

💡 小技巧:函数名应能回答“它做什么?”
👉 getUserById() → 获取用户;trimSpaces() → 去除空格


3. 类与构造函数

  • 使用 PascalCase
  • 名称为名词或名词短语
class User {}
class PaymentGateway {}
class ModalManager {}

⚠️ 不要用 IUser 开头(TypeScript 中不推荐接口加 I 前缀)


4. 接口与类型别名(TypeScript)

类型规范示例
接口PascalCase,不用 I 前缀interface User {} ✅,interface IUser {}
类型别名PascalCase`type Status = 'active''inactive';`
泛型参数单字母或有意义T, U, K extends keyof T, ResponseData

5. 文件命名

场景命名方式示例
组件文件(React/Vue)PascalCaseUserProfile.vue, LoginForm.tsx
工具函数文件camelCasekebab-caseutils/helpers.js, formatDate.ts
服务模块camelCaseapiClient.js, storageManager.ts
样式文件kebab-case(CSS/Sass)user-profile.scss, modal-style.css
测试文件与原文件同名 + .testgetUser.test.ts, helpers.test.js

💡 React 推荐:组件文件使用 PascalCase,其他使用 camelCase


6. 目录命名

目录命名说明
src/componentscomponents通用 UI 组件
src/pagespages页面级组件
src/utilsutils工具函数
src/servicesservicesAPI 请求封装
src/storestore状态管理
src/typestypes类型定义(TS)
src/assetsassets静态资源
src/stylesstyles公共样式
src/hookshooks自定义 Hook(React)

✅ 统一使用复数形式(如 components 而非 component


7. CSS / SCSS / Tailwind 命名

方案一:BEM(适合传统 CSS)

/* Block */
.user-card {
  /* Element */
}

.user-card__avatar {
  /* Modifier */
}

.user-card--loading {
}

方案二:Tailwind + 语义类(推荐现代项目)

<!-- 不要写无意义的 div -->
<div class="flex flex-col gap-4 p-6 bg-white rounded-lg shadow">
  <h3 class="text-lg font-bold text-gray-800">用户信息</h3>
  <p class="text-sm text-gray-600">加载中...</p>
</div>

✅ 建议:HTML 结构要有语义,不要堆砌无意义的 div


8. Git 分支命名

类型格式示例
新功能feat/功能名feat/user-login
Bug 修复fix/问题描述fix/header-overflow
文档更新docs/修改内容docs/readme-update
样式调整style/layout-tweakstyle/button-margin
发布版本release/vX.X.Xrelease/v1.2.0
主分支mainmastermain

9. 提交信息(Commit Message)

格式:<type>(<scope>): <description>

type说明示例
feat新功能feat(login): add social login
fix修复 bugfix(header): hide on mobile)
docs文档变更docs: update contribution guide
style格式调整(不影响逻辑)style(code): format with prettier
refactor重构refactor(api): split user service)
perf性能优化perf(list): virtual scroll added
test测试相关test(auth): add token expiry check
chore构建或工具变更chore(deps): upgrade eslint config

✅ 推荐配合 Commitlint 自动校验


🚫 三、禁止使用的命名方式

类型错误示例问题
拼音命名yonghu, zhuce无法协作,难维护
缩写不明tmp, val, obj, data1没有意义
单字母变量let a = 1;仅限循环计数器可用(如 i, j
匈牙利命名法strName, bLoading已过时
中文注释+英文代码混合// 用户信息 var userInfo = ...不专业
文件名含空格或特殊字符my file.js, index(2).js兼容性差

✅ 四、优秀命名示例对比

场景❌ 差命名✅ 好命名
加载状态loadingisLoading, isFetchingUser
按钮点击click()handleLoginClick()
验证函数check()validateEmailFormat()
存储令牌save(t)setAuthToken(token)
获取用户get(u)fetchUserById(userId)
配置对象configapiRequestConfig

🧰 五、工具辅助建议

1. ESLint 检查命名(推荐规则)

// .eslintrc.js
rules: {
  "camelcase": ["error", { "properties": "always" }],
  "@typescript-eslint/naming-convention": [
    "error",
    {
      "selector": "variable",
      "format": ["camelCase", "UPPER_CASE"]
    },
    {
      "selector": "function",
      "format": ["camelCase"]
    },
    {
      "selector": "interface",
      "format": ["PascalCase"],
      "custom": {
        "regex": "^I[A-Z]",
        "match": false
      }
    }
  ]
}

安装插件:@typescript-eslint/eslint-plugin


2. VS Code 插件推荐

插件作用
ESLint实时提示命名错误
Prettier自动格式化
Error Lens内联显示错误
Todo Tree高亮 TODO 注释

📚 六、附录:命名速查表(打印贴桌用)

类型命名规范示例
变量camelCaseuserName
布尔值is/has/can/shouldisLoading
常量UPPER_CASEAPI_TIMEOUT_MS
函数动词开头fetchData()
事件处理handleXxxhandleClick()
回调属性onXxxonClick
类/接口PascalCaseclass User {}
组件文件PascalCaseHeader.tsx
普通文件camelCasekebab-caseutils.js, auth-helper.ts
Git 分支feat/xxx, fix/xxxfeat/settings-page

💌 结语

“There are only two hard things in Computer Science: cache invalidation and naming things.”
— Phil Karlton

虽然命名很难,但只要坚持以下三点,就能持续进步:

  1. 每次命名前多想 3 秒钟:“别人能看懂吗?”
  2. Code Review 时重点看命名是否清晰
  3. 建立团队共识文档,定期回顾优化

📥 下一步建议

我可以为你生成:

  • 一份可下载的 PDF 版《前端命名规范手册》
  • VS Code 智能提示配置包(含命名检查)
  • 团队定制版模板(带公司 Logo 和技术栈)

只需告诉我:

“我要 React 版” 或 “我们是 Vue 团队”

我就能一键输出完整资料包!🚀