前端开发规范(前端命名规范的思考和想法)

前端开发规范(前端命名规范的思考和想法)
前端命名规范的思考和想法

说我想法:

1、我以前用过命名方式 btn_saveFile:btn_:代表按钮,saveFile代表动作

但AI分析,不符合命名规范btn_和驼峰混用了

总结

  1. btn_saveFile 核心问题是混用下划线 + 小驼峰,不符合前端命名规范;
  2. HTML/CSS 中必须改为纯 kebab-case:btn-save-file(完整)或 btn-save(简洁);
  3. JS 中对应变量 / 函数用 camelCase:saveFileBtn、onSaveFileClick();
  4. 前端命名核心是「场景内统一」:HTML/CSS 用 kebab-case,JS 用 camelCase,绝不混用多风格。

我可以考虑改成 btn-save-file 这种命名,但我还有一个需求场景btnTwo_saveFile,就是同一个按钮,两个地方展示。

AI给的建议:

btn_saveFile btnTwo_saveFile 这两个命名(同一个意义的按钮)

你提到的 btn_saveFile 和 btnTwo_saveFile 是指代「同一个意义但不同实例」的按钮命名,核心问题是风格混用 + 序号表达不规范,我会帮你梳理出「统一风格 + 语义清晰」的规范命名方案,既保持两个按钮的关联性,又符合前端命名规则。

一、先明确核心问题(两个命名的共性问题)

  1. 风格混乱:同时混用下划线(_)、驼峰(saveFile/Two),不符合 HTML/CSS 通用的 kebab-case 规范;
  2. 序号表达模糊:Two 是英文单词,不如数字 2 直观,且 btnTwo 易被误解为「双功能按钮」而非「第二个按钮」;
  3. 关联性弱:两个命名仅靠 Two 区分,语义上未体现「同属保存文件按钮」的关联。

二、规范命名方案(推荐 2 种,按需选择)

方案 1:数字序号区分(简单直接,适合按钮数量少的场景)

遵循「基础名 + 序号」的结构,统一用 kebab-case(HTML/CSS)+ camelCase(JS),既保持关联又清晰区分:

场景

原命名

规范命名

代码示例

HTML ID

btn_saveFile

btn-save-file-1

HTML ID

btnTwo_saveFile

btn-save-file-2

CSS 选择器

-

#btn-save-file-1

#btn-save-file-1 { background: #28a745; }

JS 变量

-

saveFileBtn1

const saveFileBtn1 = document.getElementById("btn-save-file-1");

JS 函数

-

onSaveFile1Click

function onSaveFile1Click() { /* 第一个保存按钮逻辑 */ }

方案 2:功能语义区分(更优,适合按钮有不同细分功能的场景)

避免数字序号(新增 / 删除按钮时需改序号),用「基础名 + 功能描述」区分,语义更稳定:

场景

原命名

规范命名

代码示例

HTML ID

btn_saveFile

btn-save-file-primary

HTML ID

btnTwo_saveFile

btn-save-file-secondary

CSS 选择器

-

#btn-save-file-primary

#btn-save-file-secondary { margin-left: 10px; }

JS 变量

-

saveFileBtnPrimary

const saveFileBtnSecondary = document.getElementById("btn-save-file-secondary");

前端开发规范(前端命名规范的思考和想法)

JS 函数

-

onSaveFilePrimaryClick

function onSaveFileSecondaryClick() { /* 备用保存按钮逻辑 */ }

其他功能描述参考(按需选):

  • 本地保存 vs 云端保存:btn-save-file-local / btn-save-file-cloud
  • 批量保存 vs 单条保存:btn-save-file-batch / btn-save-file-single

我本来想法:

命名三段式:

1、类型:btn_,txt_

2、分组:detail(录入)、view(查看)、search(搜索)
3、字段:user-name

估计我后面的命名,参考这个规范:

变量ID的命名:

1、id:btn-search(或者 btn-view-close)

btn-search:单页面场景

input-search-name/input-detail-name:一个是搜索name,一个是保存name:组合页面场景

文件目录的命名:

db-manage:数据库管理

js文件的命名:

zx-util.js:js文件

初稿吧,先实现功能,后续研究一下大厂的源码命名,

AI提供的规范参考:

核心原则

  • 语义化:名称应清晰描述其功能或内容,而不是其表现形式。
  • 一致性:在整个项目乃至团队中,同类事物的命名规则应保持一致。
  • 简洁性:在清晰表达意图的前提下,名称应尽可能简短。
  • 避免歧义:不使用可能产生混淆的缩写或词汇。

1. 项目与目录命名

  • 项目名:全小写,使用短横线分隔单词。例如:fe-online-editor。
  • 目录名
    • 全小写,优先使用单数名词。
    • 使用短横线分隔单词。例如:src/components/user-profile。
    • 常见目录示例:src/api, src/assets, src/components, src/hooks, src/layouts, src/pages, src/utils, src/types。

2. 文件命名

  • 组件文件
    • React/Vue组件帕斯卡命名法,与组件名严格一致。例如:UserProfile.tsx, SidebarMenu.vue。
    • 非单文件组件:关联的样式、逻辑、类型文件应紧随主文件。例如:
      • UserProfile.tsx
      • UserProfile.module.scss/ UserProfile.css
      • UserProfile.hooks.ts
      • UserProfile.types.ts
  • 工具类/工具函数文件:使用短横线命名法。例如:format-date.js, http-request.ts。
  • 配置文件:全小写,常用短横线。例如:.eslintrc.js, vue.config.js, tailwind.config.js。
  • 图片/资源文件:全小写,使用短横线或下划线,建议包含描述和尺寸/状态。例如:logo-primary.svg, user-avatar-default.png, icon_close@2x.png, button_active.png。

3. 变量与函数命名

  • 变量/常量
    • 使用驼峰命名法
    • 使用名词形容词+名词。例如:userList, isLoading, MAX_COUNT。
    • 布尔变量以 is, has, can, should等开头。例如:isVisible, hasPermission。
  • 函数/方法
    • 使用驼峰命名法
    • 使用动词动词+名词。清晰地表达其行为。
    • 常用动词前缀约定
      • get:获取数据。getUserInfo()
      • set:设置数据。setLoading(true)
      • handle:处理事件。handleClick()
      • fetch:发起网络请求。fetchUserList()
      • on:事件回调。onSuccess, onChange
      • is, has, validate:判断。isValidEmail(), hasRequiredFields()
      • render:渲染UI。renderHeader()
      • use:自定义Hook(React)。useToggle()

4. CSS / 样式命名

  • 核心方法论:推荐 BEM(Block Element Modifier) 或其变种(如SUIT),用于解决CSS全局命名冲突和提供高可读性。
    • Block(块):独立且有意义的组件。例如:.menu。
    • Element(元素):块的组成部分,不能脱离块独立存在。用双下划线连接。例如:.menu__item。
    • Modifier(修饰符):表示块或元素的状态或变体。用双中划线连接。例如:.menu--horizontal, .menu__item--active。
  • 命名规则
    • 全小写,用短横线分隔单词(BEM内部连接符除外)。
    • 避免使用样式属性命名(如 .red-text),应使用语义化命名(如 .text-error)。
  • CSS-in-JS(如 styled-components):组件内的样式变量名也应遵循语义化和驼峰规则。

5. 分支与提交命名

  • Git分支名
    • 类型:feat/, fix/, docs/, style/, refactor/, test/, chore/
    • 描述:短横线分隔,简明扼要。
    • 示例:feat/add-user-login, fix/button-click-bug, docs/update-readme。
  • Git提交信息
    • 遵循 Conventional Commits 规范。
    • 格式():
    • 示例
      • feat(auth): 新增微信扫码登录功能
      • fix(router): 修复页面跳转后导航高亮错误
      • docs: 更新项目启动说明

6. 工程化与工具约定

  • 组件 Props:使用驼峰命名法。在模板(Vue/React)中传递时,若框架要求(如Vue),使用短横线格式。
  • 自定义事件:使用短横线命名法。例如:form-submit, item-delete。
  • TypeScript
    • 接口:前缀 I已非强制,推荐直接使用帕斯卡命名。例如:UserProfile, ApiResponse。
    • 枚举:帕斯卡命名,成员使用全大写和下划线。例如:enum UserRole { ADMIN, GUEST }或 enum HttpCode { OK = 200, NOT_FOUND = 404 }。
  • 常量:全大写,下划线分隔。定义在模块顶层或独立文件。例如:export const API_TIMEOUT = 10000;。

总结与执行建议

  1. 文档化:将本规范放在团队共享的文档(如Wiki)或项目根目录的 CONTRIBUTING.md文件中。
  2. 工具化:使用 ESLintStylelintPrettier 等工具自动化检查和格式化代码,将规则沉淀到配置中。
  3. Code Review:在代码审查中,将命名规范作为重要检查项。
  4. 保持进化:规范应随技术栈和团队需求适度调整,定期回顾。

遵循这套规范,能显著提升代码的自解释性,让新人更快上手,也让未来的你感谢现在的自己。希望这份指南对你有所帮助!

文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有