记一次前端团队基本命名规范
仅仅仅仅仅仅是一份简单的代码规范参考 ~
团队现状
- 代码风格各异
- 可读性和可维护性下降
- 增加团队协作和项目维护的难度
- 需要制定统一的代码规范
使用背景
- 该规范主要使用新项目中;
- 现有项目应遵守原有项目规范(绝对前提)!!!尽可能使用该规范;
- 基于以上【第一点】【第二点】前提下,MR 流程会强制使用该规范 ;
命名基础
- 采用全小写字母组成;
- 名称过长时,使用中划线(-)拼接;(除 Javascript 变量命名)
Q:为什么要选用全小写加中划线?
A:在命名风格里,是多样的,有大驼峰命名(TodoList),小驼峰命名(todoList),中划线命名(todo-list),下划线命名(todo_list)等等等等。 **使用全小写加中划线是因为这个风格是比较统一的,可以同时存在多个地方使用,如项目命名,目录命名,文件命名。**而其他风格是没有很好的统一标准的,比如 vue 组件命名,官方推荐就存在两种命名(大驼峰,中划线)...
A:公司内部某项目名使用 “ - ” 被误解析为 减号(-)(字符 “-” 解析失败
A:参考了 github 项目命名,存在多种命名,使用中划线命名算比较常见的(暂时没有数据支持)
项目命名
- 采用全小写字母组成;
- 名称过长时,使用中划线(-)拼接;
如:my-project-name ,webapp-asclepius
文件夹(目录)命名
- 采用全小写字母组成;
- 名称过长时,使用中划线(-)拼接;
- 有复数结构时,要采用复数命名法。如:images/components/utils/;
- 常见目录
文件夹名 含义 src 源代码 images 图片资源 test 测试 common 公共资源 public, static 静态资源 components 组件 pages, views 页面模块
文件命名
- 采用全小写字母组成;
- 名称过长时,使用中划线(-)拼接;
如:todo-list
组件命名(vue)
- 采用全小写字母组成
- 名称过长时,使用中划线(-)拼接
如:todo-list
通用组件命名
- 统一使用 base 开头;
如 base-button, base-table, base-form
由于新项目推荐使用 Vue3 ,所以不需要特别纠结 Vue2 风格指南,只是作为一部分参考使用,如有冲突,一切以本文档为准
CSS 命名
参考 CSS 命名规范:BEM 规范,OOCSS 规范。
Class 命名
- 采用全小写字母组成;
- 名称过长时,使用中划线(-)拼接;
Id 命名
- 采用全小写字母组成;
- 名称过长时,使用中划线(-)拼接;
对于具体命名方式,暂时没有比较好的总结,所以先强制约束以上两点命名规则,不允许出现驼峰命名!!!!!
常见 Class / Id 命名
ClassName | 含义 |
---|---|
about | 关于 |
account | 账户 |
arrow | 箭头图标 |
article | 文章 |
aside | 边栏 |
audio | 音频 |
avatar | 头像 |
bg,background | 背景 |
bar | 栏 |
blog | 博客 |
brand | 品牌,商标 |
banner | 广告条 (顶部广告条) |
crumb,breadcrumb | 面包屑 |
btn,button | 按钮 |
caption | 标题,说明 |
category | 分类 |
chart | 图表 |
clearfix | 清除浮动 |
close | 关闭 |
col,column | 列 |
comment | 评论 |
community | 社区 |
container | 容器 |
content | 内容 |
copyright | 版权 |
current | 当前态,选中态 |
default | 默认 |
description | 描述 |
detail | 细节 |
disabled | 不可用 |
drop | 下拉 |
dorpmenu | 下拉菜单 |
download | 下载 |
entry | 文章,博文 |
error | 错误 |
even | 偶数,常用于多行列表或表格中 |
fail | 失败(提示) |
faq | 常见问题 |
special-subject | 专题 |
stow | 收起 |
field | 用于表单的输入区域 |
figure | 图 |
filter | 筛选 |
first | 第一个 |
foot,footer | 页脚 |
forum | 论坛 |
friendlink | 友情连接 |
gallery | 画廊 |
guide | 指南 |
group | 组 |
head,header | 页头 |
help | 帮助 |
hide | 隐藏 |
hightlight | 高亮 |
home | 主页 |
homepage | 首页 |
hot | 热门,热点 |
icon | 图标 |
info,information | 信息 |
joinus | 加入我们 |
keyword | 关键词 |
last | 最后一个 |
layout | 布局 |
left , right ,center | 居左,居中,居右 |
list | 列表 |
link | 链接 |
login | 登录 |
loginbar | 登录条 |
logout | 退出 |
logo | 标志 |
main | 主体 |
menu | 菜单 |
meta | 元语言 |
module | 模块 |
more | 更多 |
msg,message | 消息 |
nav,navigation | 主导航 |
news | 新闻 |
nextpage | 下一页 |
nub | 小块 |
odd | 奇数 |
leave | 离开 |
output | 输出 |
pagination | 分页器 |
partner | 合作伙伴 |
pop,popup | 弹窗 |
preview | 预览 |
previous | 上一页 |
primary | 主要 |
product | 产品 |
progress | 进度条 |
promotion | 促销 |
publisher | 生产商 |
recommend | 推荐 |
reg,register | 注册 |
save | 保存 |
screenshot | 截图 |
scroll | 滚动 |
search | 搜索 |
searchinput | 搜索输入框 |
secondary | 次要 |
section | 区块 |
selected | 已选 |
service | 服务 |
share | 分享 |
show | 显示 |
sidebar | 边栏,侧栏 |
siteinfo | 网站信息 |
siteinfo-legal | 法律声明 |
siteinfo-credits | 信誉 |
sitemap | 网站地图 |
slide | 幻灯片,图片切换 |
sort | 排序 |
status | 状态 |
sub | 次级的,子级的 |
subpage | 二级页面,子页面 |
submenu | 子菜单 |
submit | 提交 |
subnav | 二级导航 |
subscribe | 订阅 |
subtitle | 副标题 |
success | 成功(提示) |
summary | 摘要 |
tab | 标签页 |
tag | 标签 |
table | 表格 |
txt,text | 文本 |
thumbnail | 缩略图 |
time | 时间 |
tip | 提示 |
title | 标题 |
tool, toolbar | 工具条 |
video | 视频 |
vote | 投票 |
wrap,wrapper | 容器,包,一般用于最外层 |
Sass 命名
- 采用全小写字母组成;
- 名称过长时,使用中划线(-)拼接;
路由路径命名
- 采用全小写字母组成;
- 名称过长时,使用中划线(-)拼接;
如:user-management (尽可能要与对应页面组件命名保持一致)
JavaScript 命名
参考 JavaScript 编写规范:ESLint,JSLint
常量
使用大写字母、数字组成,下划线拼接,如:CONSULT_TYPE
const API_KEY = "your_api_key";
const USER_ROLES = ["admin", "user"];
变量
普通变量
字母、数字组成,驼峰拼接,例:idCard
数据变量
// 对象数组 列表数据最好后面加个 List 或者 Data
const companyList = ref([]);
const checkedList = ref([]);
const selectedList = ref([]);
const addressList = ref([]);
const userList = [];
const tableData = [];
const arr = [];
// 非对象数组在字母后面加 s
const ids = [];
const selectedIds = [];
const activeKeys = [];
const nums = [3, 5, 6];
布尔值变量
使用前缀 is、has 或 should:例如,isActive、hasPermission 或 shouldUpdate
其他注意事项
变量名不应过短,要能准确完整地描述该变量所表述的事物
不好的变量名 好的变量名 inp input, priceInput day1, day2, param1 today, tomorrow id userId, orderId obj orderData, houseInfos tId removeMsgTimerId handler submitHandler, searchHandler 变量名不要使用计算机术语,如:texareaData,应该取和业务相关的名字,如:leaveMsg
变量名的对仗要明确,如:up/down、begin/end、opened/closed、visible/invisible、scource/target
不要使用中文拼音,要使用正确的英文单词,如:shijianchuo 应改成 timestamp
需要临时变量时,建议结合实际给变量命名,少用 temp 和 obj
布尔变量不要使用否定的名词,如 notOk、notReady,因为否定的词取反比较反思维,如 if (!notOk)
函数
构造函数
大驼峰命名,如:Vue()
类
大驼峰命名,如:User、Product
class UserAccount {}
class ShoppingCart {}
普通函数
小驼峰命名,动词 + 名词方式组合,例:getList() 一般都使用动词 + 名词 根据实际情况修改
常见函数命名
动词 | 含义 | 用法示例 |
---|---|---|
get | 获取某个值 | getList |
set | 设置某个值 | setData |
switch/toggle | 切换某个值 | switchTab/toggleTab |
check | 判断是否可执行某个动作(权限) | 函数返回一个布尔值。true:可执行;false:不可执行 |
has | 判断是否含有某个值 | 函数返回一个布尔值。true:含有此值;false:不含有此值 |
is | 判断是否为某个值 | 函数返回一个布尔值。true:为某个值;false:不为某个值 |
load | 加载某些数据 | 无返回值或者返回是否加载完成的结果 |
change | 改变数据 | changeData |
编辑 onEdit handleEdit edit
新增 onAdd handleAdd add
删除 onDelete handleDelete delete
批量删除 onMulDelete handleMulDelete mulDelete
重命名 onRename handleRename
搜索 search
获取表格列表 getTableData // 一般一般一般业务页面只有一个查询表格
返回 onBack handleback back
提交 onSubmit hanldeSubmit sumbit
确认 onConfirm onOk confirm ok
取消 onCancel cancel
关闭 onClose close
保存 onSave save