前言
近期接手了一个h5的web端编辑器项目,在开发的过程中经过了数不清的开发者,大家的思维方式和水平参差不齐,导致了以下几个对于项目代码稳健性和DX都影响很大的问题:
- 代码风格
- 每个人代码风格不同,let, var 满天飞,想用啥就用啥
- 回调地狱的狂热爱好者,对async/await语法不熟悉导致的大量嵌套
- 稳健性
- 开发者对Vuex的了解不够深入,异步操作写在了mutation中,大量使用了this.dispatch语法,代码啰嗦
- 可读性
- 代码风格跟着思路从头走到尾,缺乏封装,导致有上千行的函数
问题归因
-
项目人手不足。 常常需要招聘实习生给项目做需求,与此同时,项目的 Maintainer 对提交代码的 Code Review 做得不足,导致许多代码都是能跑就行地合到了 master 分支,逐渐积累下越来越多的技术债。
-
代码风格缺乏硬性的制约。 在开发的流程中,只有在 Code Review 的时候提到过代码风格的问题,比如 var, let, const 的使用不当等等。过度依赖约定,导致许多规范并没有实际的行使下来。
-
代码提交信息和分支命名不规范。 提交信息里面充斥着"update","修复bug",这样的随意说明,没有 type 和scope ,在故障出现的时候没办法快速 review 到问题的直接原因。
-
业务逻辑和UI逻辑没有分离。 项目整体的开发工程有多处没有遵循数据驱动视图渲染的准则,关于业务的逻辑(包括游戏场景的逻辑,接口数据的预处理等等)散落在了.vue,store和utils中,和UI无关的业务逻辑和视图的控制混合在一起,可读性很差。而且这样会导致代码缺乏封装,一个功能多处实现,且入口和出口模糊,一个 .vue 既是入口也是出口。
目标
- 代码风格统一
在刚接手项目的时候,需要在原来开发到80%的功能模块继续开发,当我开始 review 的时候发现代码的可读性很差。例如:
- store 中的一个 action 长达数百行,多处 if-else 实现具体逻辑,缺乏封装。
- let, var 混用,不使用 const
于是配置更详细的 eslint 来解决该问题:
module.exports = {
root: true,
env: {
node: true
},
extends: ["plugin:vue/essential", "@vue/standard"],
globals: {
qc: true,
Phaser: true,
Color: true
},
rules: {
"no-console": "off",
"no-debugger": process.env.NODE_ENV === "production" ? "error" : "off",
// 没有重新赋值的变量使用 const 定义
"prefer-const": ["error", {
"destructuring": "any",
"ignoreReadBeforeAssign": false
}],
// 禁止使用 var,使用 let、const 代替
'no-var': 'error',
// 限制块语句的最大可嵌套深度
'max-depth': ['warn', 4],
// 限制方法参数个数
'max-params': ['warn', 3]
},
parserOpti:ons: {
parser: "babel-eslint"
},
overrides: [
{
files: [
"**/__tests__/*.{j,t}s?(x)",
"**/tests/unit/**/*.spec.{j,t}s?(x)"
],
env: {
jest: true
}
}
]
};
其中,限制函数的行数,参数的个数,文件的最大行数,都可以间接强制开发者对代码进行精简,封装。
- 代码提交规范统一
在实际开发的过程中,约定都是虚的,只有强制的lint才能规范好实际的产出。于是引入husky+commitlint组合拳。
为项目安装 commitlint ,运行在每次commit的时候运行 commitlint --edit $1 即可根据项目根目录配置的 .commitlintrc 来对提交的注释信息进行格式检查。与此同时,当然不能期望开发者会自行主动完成该动作,为了达到强制性,需要配置 git hooks 在 commit-msg 的时候自动运行 commitlint 校验,可以给项目安装 husky 更便捷地在 package.json 配置 git hooks。
为了更方便的填写规范的提交注释 type(scope): messages... ,可以使用 commitizen 工具,命令行对话式地生成提交注释。
具体可以参考我的模板,欢迎来⭐️:git-husky-commitizen-lab
多多指教!
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!