前端开发规范
前端开发规范
CSS相关
命名规范

尽量避免使用id选择器,使用class选择器,不要使用标签选择器设置样式
使用BEM规范
标准的 BEM 写法是:.block-name__element-name--modifier-name
- Block
1 | 可以使用字母,数字,连字符进行命名 |
1 | <header class="header"></header> |
1 | .header { |
- Element
1 | 组成块的一部分,内部的任何元素都与块有关联,不能在块的外部使用 |
1 | <article class="article"> |
1 | .article { |
- Modifier
1 | 用来表示块或者元素的状态,外观或者行为,不必须,可以选择使用 |
1 | <button class="btn btn--disabled"></button> |
1 | .btn { |
示例

1 | <div class="list-card"> |
1 | 当然,BEM 不是必须的,你依然可以选择自己喜欢的方式编写,组织你的 CSS 代码。 |
Mix
1 | 一种在一个DOM节点上使用不同BEM的方法: |
1 | <!-- `header` block --> |
常见的CSS class类名
1 | 包裹类: container, wrapper, outer, inner, box, header, footer,main, content, aside, page, section, block |
参考来源:BEM命名规范入门及常用CSS class 命名 、css BEM书写规范
预编译处理器
- 预编译处理器不要嵌套太多层,一般
不超过5层
,超过5层则必须要拆分以减少css代码量; - 使用BEM规范选择器
建议不超过2级
,命名上不要使用B__E__E的写法(B: block,E:element);
布局
如果没有浏览器兼容问题则使用flex布局
页面上的样式相同时应当抽取公共部分进行类名
class
进行引用页面尽量布局尽量考虑做严谨一些
JS相关
变量声明时,确定不变的写成常量 const,而不是过度使用变量声明 let,var声明基本不用。
命名
- 统一使用驼峰(camelCase)命名(对象、函数、实例)
1 | // good |
- 用 PascalCase 命名类
1 | // bad |
格式规范
使用eslint+prettier插件进行统一管理配置,解决eslint和prettier相关冲突问题
1 | eslint规则在.eslintrc.js中定义,规定好相关规则; |
主要注意一下几条:
- 代码缩进用4或者2空格
- 语句必须默认后加分号
- 使用单引号或双引号等相关配置(还有很多,配置参考)
- 提交代码前将console.log语句删掉或注释掉(不然影响其他开发人员调试)
一些情况是不需要检测的,例如第3方的库, 框架、组件、ui库等等,可以将这些文件放在.eslintignore文件中,可以忽略eslint的检测
来源:稀土掘金
prettier
- 安装依赖:
1
2
3npm install --save-dev --save-exact prettier
// or
yarn add --dev --exact prettier - 创建一个空配置文件,配置相关配置(相关配置 百度一下 )
1
在根目录下创建 .prettierrc.json
- 创建一个.prettierignore文件,用于忽略文件不能格式化
1
2
3
4# Ignore artifacts:
dist
build
coverage - VSCode安装 Prettier-Code Formater插件并配置
format On Save
进行保存格式化。
prettier 和 eslint 会有一些配置上的冲突
安装eslint-config-prettier以使 ESLint 和 Prettier 相互配合,安装完后在.eslintrc中配置(以Create-React-App为例)
1 | "eslintConfig": { |
来源:前端开发爱好者
代码
多使用函数式编程
- es5:filter,map,reduce,slice,concat
- es6+: findIndex,find,includes,some,isArray等
枚举或标识不要使用中文
在项目中尽量不要使用中文进行传值,个人对声明值为中文是较为反感的。
注释
有必要时可添加添加 jsDoc注释
进行一些注释提示;
可以通过输入 /** 然后 Enter 快速生成注释;
变量/函数 声明时,可为弱类型提供代码提示;
参考:JSDoc 注释规范
vue项目相关
v-for
- 一定要加上key,一般key取id或者唯一的变量值,比如:key=”item.id”,:key=”item.uuid”等,如果没有则使用index进行绑定
维护重用
- 项目页面上超过一千行代码时应当考虑抽取封装组件,单个功能要抽离到当前文件目录下的components目录下,以单独组件方式引入到当前页面使用
- 页面上代码相同时
(超过3次)
应抽离成通用方法进行开发,如多个页面都用到,抽取成当前业务块的公共方法,多个业务块用到则抽取成全局方法 - 使用频率较高的工具类函数抽离到utils/index.js工具类中
项目目录结构
- 按业务模块进行目录划分,一个业务模块只负责当前业务模块内的事情
- 业务模块的公共方法也可在当前业务模块目录下建立一个公共common目录进行存放
其他一些文件命名和编码规范
下面有几篇较为全面的一些风格指南,择其一些相应的规范约束自己,写出较舒服的代码
地址:史上最全 Vue 前端代码风格指南、前端开发规范文档、vue官方风格指南
业务相关
列表
列表规定显示为一行/三行/五行(
在开发时应该提前和产品确认规定
),超出文字使用一致省略预知长度固定值或较短的字典值,宽度设为固定宽度
表格数据请求方法时需要给表格添加loading加载状态(常规做法是请求封装)
具体方式:百度一下
对话框表单提交
给对应的提交请求按钮添加loading请求限制操作或者添加模态加载等操作安全(常规做法是请求封装)
具体方式:百度一下
(其他业务相关约定有待补充)
命名相关
变量命名
变量名应该使用清晰具体含义的英文描述,避免用一个字母命名,而应改使命名更加语义化
- 使用易读的命名
- 描述变量名尽量简洁精确,具体这个变量是做什么操作
- 像data/value这些并不清楚是做什么的,如果使用则应考虑是否能明显地从上下文知道数据的含义