您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
前端标准化之旅
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
前端标准化之旅
京东云开发者
2023-03-16
IP归属:北京
29000浏览
前端
**作者:京东零售 陈艳春** 本文主要是介绍前端研发的一些标准化规范,良好的代码规范,不仅能够让代码简洁清晰,还可以减少 bug 的出现,更能够让看代码的人赏心悦目,本文主要从命名规范、语法规范、后端系统开发规范、版本更新规范、上线邮件申请规范、项目启动规范来、文件目录规范七方面介绍,文档内如有错漏之处,敬请大家指正,会及时做出调整;也希望各位能够提出更宝贵意见和建议,使文档更加完善。当然如果感觉有可借鉴之处,欢迎大家采纳。 ## 引言 前端标准化是我们践行前端工程化中重要的一部分,为什么要标准化呢?首先我们开发是需要多人开发的,每一个开发者都有各自的编码喜好和习惯,就是因为这个不同的编码习惯和喜好增加了我们项目的维护成本,所以每个项目或者团队需要明确统一的标准。 以下是我积累的一些前端规范以及一些个人建议: ## 一.命名规范 好的命名是通俗易懂,见名知意,即看css能很清晰明了的看出html的结构,优雅的js命名,可以看出每个func所处理的事情,清晰的文件和文件夹命名规范,有助于理解项目结构,以下介绍下我们日常积累的一些命名规范。 1.文件夹使用短横杠命名法(`xxx-xxx`),vue、js、scss等文件使用小写加中划线命名法(`xxx-xxx`) 2.组件开发规范 (1)根节点class必须是"cp-xxx"开头,xxx对应的是组件的名称,组件里面的class 以cp-xxx形式命名class,尽量不要使用scoped。 (2)业务组件可以放在当前业务目录的component文件夹,import导入时用bcp-xxx开头已和公共组件加以区分,其他规范和公共组件保持一致。 3. 方法命名:小写+驼峰(xxxXxYy), 4. 组件里面的`name`都必须使用`Pascal`命名法,组件使用名称类似`xxx-xxx`这样。 5. 路由跳转地址,不要直接写死链接地址,使用路由链接地址对应的name进行跳转。 6. css命名规范: 1)样式: a) 全局样式:app-* b) 页面样式:pg-* pg-marking(marking是模块) c) 组件样式:cp-* d) 样式属性顺序规范:js有好的写法,推荐语法写法和不推荐语法写法 2)状态: a) 全局样式:.show, .hide(全局状态命名尽量简单,不要有过多前缀) b) 页面样式:pg-*_active(页面样式尽量只能在当前页面使用,必须添加前缀) c) 组件样式:cp-*_active(组件样式尽量只能在当前组件使用,必须添加前缀) d) 禁止使用scoped,无论是在全局、页面还是组件内 7.枚举值定义:全局事件名、本地存储的key值等需要抽离出单独的文件进行统一管理, 避免冲突。 ## 二.语法规范 语法规范是为了提高工作效率,兼容性优良,页面性能优化,代码简洁、明了、有序,尽可能的减少服务器的负载,保证最快的解析速度。 1. 根据当前eslint的规范编写代码。 2. 尽可能的少用可变变量,能用const的就不要使用let,完全不使用var。 3. 拥抱ES6:(举一些例子,顺带学习回顾下) (1)赋值简写:`{ data: data }`可以写成`{ data }` (2)函数简写:`{data: function () {}}`可以写成`{data () {}}` (3)对象取值:const {a,b,c,d,e} = obj || {} (4)合并数据: ![](//img1.jcloudcs.com/developer.jdcloud.com/2ef277e0-47bb-4e0b-aade-19b668b5357e20230316212506.png) 代替 ![](//img1.jcloudcs.com/developer.jdcloud.com/04c38240-c7bf-48db-972b-f60151db4f0a20230316212450.png) (5)拼接字符串: ![](//img1.jcloudcs.com/developer.jdcloud.com/7f85d104-ccc7-433b-85eb-c6841df432c720230316212527.png) 代替 ![](//img1.jcloudcs.com/developer.jdcloud.com/eefdc4ac-7ea9-45ad-bdcc-ad52f8ed555920230316212604.png) (6)if判断条件合集: ![](//img1.jcloudcs.com/developer.jdcloud.com/1d36f4e1-6b8f-4eb5-8215-93a506861a9e20230316212646.png) 代替 ![](//img1.jcloudcs.com/developer.jdcloud.com/41053c67-fd26-47d0-b8fc-d1889105906d20230316212654.png) (7)列表搜索 ![](//img1.jcloudcs.com/developer.jdcloud.com/e255800a-d467-4fac-8945-c662804b5a1220230316212719.png) 代替 ![](//img1.jcloudcs.com/developer.jdcloud.com/b17c9850-5518-4113-96af-4d0765ed091220230316212744.png) (8)获取对象属性值 ![](//img1.jcloudcs.com/developer.jdcloud.com/35b43b30-d6d9-48bc-a629-7925970e703620230316213100.png) 代替 ![](//img1.jcloudcs.com/developer.jdcloud.com/227e904c-54e1-4205-b68c-dfc28192fb1b20230316213128.png) (9)添加对象属性 ![](//img1.jcloudcs.com/developer.jdcloud.com/f215a274-7fda-4453-b254-a6a1bfd33b4820230316213156.png) 代替 ![](//img1.jcloudcs.com/developer.jdcloud.com/847e76e1-f1ad-474f-a94a-acb658aac41420230316212843.png) (10)输入框非空判断 ![](//img1.jcloudcs.com/developer.jdcloud.com/a8faee20-bb73-4487-993d-c107d43d9ff020230316212854.png) 代替 ![](//img1.jcloudcs.com/developer.jdcloud.com/f6fa75c5-3b72-4a52-be3c-7deb825f1e8420230316212925.png) 4. 使用ES6的箭头函数需要注意: (1) **函数体内的 `this` 对象就是定义时所在的对象,而不是使用时所在的对象。** (2) 不可以当做构造函数。也就是说,不可以使用`new`命令,否则会抛出一个错误。 (3)不可以使用`arguments`对象,该对象在函数体内不存在。如果要用,可以使用`rest`参数代替。(`rest`参数使用自行查看《ES6标准入门》)。 (4)不可以使用`yield`命令,因此箭头函数不能用作`Generator`函数。 (5)非必要情况,不要再元素上写`style`。 ## 三.后台系统开发规范 以下主要是针对后端开发系统的一些开发规范,主要是将整个网站统一风格,以达到更好的性能优化。 1.二级菜单,一律加上面包屑 2.“重置”按钮 一律是重置查询条件,不进行数据查询 3.input 一律加上placeholder 4.展示的table,有些数据没有的话,要使用 - 展示 5.数据至少大于等于1条时,才会显示分页 6.table 列表里面,在接口请求过程中一律加上isLoading 7.搜索结果为空,要加上空页面 8.全局loading:(需要加loading就在请求接口时,加上isLoading:true) 需要使用的情况: (1)进入页面记载数据 (2)提交表单 (3)接口是非幂等性的情况。 不需要使用的情况: (1)打开弹窗时需要请求接口的 (2)接口是幂等性、响应快,且接口成功响应后要重新加载数据的情况 9.列表分页默认size:20,pageSizes:[20,50,100],若是弹框内分页,默认size:10,pageSizes:[10,30,50] 10.翻页查询,比方说翻到第五页,点击查询,应该从pageNo = 1 开始 ## 四.版本号更新规范 版本规范的意义,是让开发者一眼查看到本项目的更新次数,以及本次更新的日期,开发人员,开发分支,能够快速的定位问题,了解项目迭代版本的内容。 X.Y.Z (主版本号.次版本号.修订号) 1. 版本号必须采用 X.Y.Z 的格式,其中 X、Y、Z为非负的整数,且禁止在数字前方补零。X是主版本号、Y是次版本号、Z为修订号。每个元素必须以数值来递增。 2. 修订号:当涉及原有页面修改,比如新增按钮、修改文案、bug修复时递增. 3. 次版本号:当涉及新增一定(少量)功能模块,比如新增栏目、新增页面时递增。次版本号递增时,修订号必须归0。 4. 主版本号:当涉及功能模块有较大的变动,比如增加多个功能模块或是整体架构发生变化时递增。主版本号递增时,次版本号和修订号必须归0。 5. Changelog写在项目的 README.md 里,采用倒序排列,即最新的写在最上边,模板如下: ### 2.0.0 - 更新主题:技师看板 - 更新时间:2022-02-23 - 开发人员:xxx - 开发分支:dev-20220223-cyc -board ``` 1、增加技师看板新页面 ``` 6. Changelog和package.json里的版本号要同步更新 ## 五:上线规范: 1.上线时间规范 每周的周二和周四为上线日,这样就为研发和产品制定了一个规范,不用考虑每天加班熬夜上线,避免产品因“项目紧急”的缘由让研发临时上线,从而减少研发的压力。 2.上线邮件申请规范 比如今天上线有A项目、B项目、C项目等等多个项目的时候,如果每个人上线的同学提交一个审批邮件,对于领导来说需要每天审批很多邮件,所以此时我们不得不制定一个标准。 目前的上线审批流程为:每周二和周四需求大的人负责发送当天的上线邮件申请,负责人提前收集好上线的需求,分支,review人,流程步骤等信息。汇总一起发送邮件,此时领导只需要回复一个上线邮件即可。具体模版,如下: ![](//img1.jcloudcs.com/developer.jdcloud.com/1c589393-29af-4af1-a630-3c5cbbc4dbe820230316213326.png) ## 六.项目启动规范 项目启动对于新入职员工,以及新人还是有一定的挑战的,特别是一些项目需要配置相关的host,package.json文件里面一般只是基础的启动,不会提示配置host等,此时就需要我们制定一个规范,比如在README.md文件下写上具体的启动步骤,以及每个环境需要配置的host,具体如下: ![](//img1.jcloudcs.com/developer.jdcloud.com/fc9eed69-bf40-4410-a0f7-1c81d1dbe14a20230316213357.png) ![](//img1.jcloudcs.com/developer.jdcloud.com/f9a440f5-ab00-41fa-9833-b8110905483020230316213345.png) 有了以上的启动引导是不是不管谁开发都方便了很多,只要按照上面的步骤一步一步的进行,就不需要初次开发该项目的人员去找相关开发帮忙启动项目,并且也附加了登录账号等信息,大大提高人效数倍。 ## 七:文件目录规范: 一个项目,有一个好的目录结构那是必不可少的。当我们项目越来越大时或者多人协作开发时,我们就更应该有一个清晰的目录结构。好的项目目录结构能够给我们带来诸多的好处,比如:每个功能或模块单独管理、代码的可读性增强、代码的可维护性增强、易于多人协作之间的沟通、接下来我将分享一下我在平时项目中总结的目录结构,当然这只是我个人的实践,欢迎大家提出更好的意见。 |---public |---index.html(入口html) |---src |---assets(静态资源) |---css(全局样式) |---js(全局js) |---images(静态图片) |---components(基础组件) |---hocs(业务组件) |---layout(全局布局) |---service(axios接口封装) |---store(vuex) |---views/pages(页面) |---App.vue |---main.js(入口js) |---.editorconfig(编辑器配置) |---.eslintrc(代码规范的配置) |---.gitignore(Git仓库忽略掉的文件或目录) |---babel.config.js(babel编译的配置) |---package.json(项目配置文件) |---README.md(项目描述) |---vue.config.js(配置文件) ## 总结: 本篇文章以我所了解的规范为例,阐述了前端的一些标准化规范,希望能给其他前端小伙伴或者其他前端团队提供参考。 由于个人水平有限,文章中的诸多论述难免会有瑕疵,希望大家多提宝贵意见。
原创文章,需联系作者,授权转载
上一篇:文盘Rust — 子命令提示,提高用户体验
下一篇:Backbone前端框架解读
相关文章
前端十年回顾 | 漫画前端的前世今生
Taro小程序跨端开发入门实战
【技术干货】企业级扫描平台EOS关于JS扫描落地与实践!
京东云开发者
文章数
90
阅读量
207668
作者其他文章
01
安全测试之探索windows游戏扫雷
扫雷游戏相信很多人都从小玩过,在那个电脑游戏并不多的时代,扫雷成为玩的热度蛮高的一款游戏之一,然而就在有一次,接触到了一次不寻常的扫雷过程,使得后来我也有了这个冲动,也来做一次。通过动态调试,逆向和C来写一个扫雷辅助工具从而提高逆向与编码技能。
01
https 的本质、证书验证过程以及数据加密
01
《京东金融APP的鸿蒙之旅系列专题》新特性篇:意图框架接入
01
《京东金融APP的鸿蒙之旅系列专题》鸿蒙工程化:Hvigor构建技术
京东云开发者
文章数
90
阅读量
207668
作者其他文章
01
安全测试之探索windows游戏扫雷
01
https 的本质、证书验证过程以及数据加密
01
《京东金融APP的鸿蒙之旅系列专题》新特性篇:意图框架接入
01
《京东金融APP的鸿蒙之旅系列专题》鸿蒙工程化:Hvigor构建技术
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号