当团队中多人协作时,因为同事之间不同的代码风格和编辑器,会导致项目的代码无法统一风格,不利于阅读,也更容易造成bug,为统一项目中代码的风格,减少书写上的bug,所以整理了一下利用 eslint+husky+prettier+lint-staged来配置前端代码规范。
配置文件
npm包安装
1 | $ npm i -D eslint prettier eslint-plugin-prettier eslint-config-prettier husky lint-staged |
1、在前端应用中的package.json中新增如下文件:
- 在scripts中直接写“precommit”会报错,解决方案是:
1 | { |
2、增加 .eslintrc.js 扫描规则:
1 | module.exports = { |
3、增加 .prettierrc.js 文件,用于在扫描通过后格式化代码(该步骤可选,如果不引入prettier的话,相应的在package和eslint中去除掉相应配置即可)
1 | module.exports = { |
实现原理
1、执行流程
达到上述效果,执行的流程如下:
- 待提交的代码git add添加到暂存区;
- 执行git commit;
- husky注册在git pre-commit的钩子函数被调用,执行lint-staged;
- lint-staged取得所有被提交的文件依次执行写好的任务(ESlint 和 Prettier);
- 如果有错误(没通过ESlint检查) 则停止任务,同时打印错误信息,等待修复后再执行commit;
- 成功commit,可push到远程。
在上述流程中,有这样几个核心点:
- husky注册git的钩子函数保证在git 执行commit时调用代码扫描的动作;
- eslint完成按照配置的规则进行扫描;
- Lint-staged保证只对当前add到git stage区的文件进行扫描操作,这样做的原因在于,如果对全工程的文件进行扫描的话,并且之前的前端工程并未注重代码规则的检测的话,很大可能性会出现成百上千的error,基本上心里是崩溃的。因此,只对当前add的文件进行检测,达到及时止损的目的,历史代码可以切到新的分支进行修复后再进行合并。
2、插件说明
eslint
eslint是一个插件化的JavaScript代码检测工具。
eslint的优点如下:
1、可配置的代码检测工具;
2、确保应用的线上质量,不满足代码规范的代码都不能push到远程分支上;
3、更高的可读性,eslint会对代码质量进行扫描,并且一般结合prettier使用的话,在通过代码规范后可以对代码进行格式化,可以保证代码可读性;
4、避免低级的错误,通过eslint –fix可以根据规范对代码的部分低级错误进行更正。
husky
确保本地的代码已经通过检查才能push到远程,这样才能从一定程度上确保应用的线上质量,同时能够避免lint的反馈流程过长。
lint-staged
每次只对当前修改后的文件进行扫描,即进行git add加入到stage区的文件进行扫描即可,完成对增量代码进行检查。如何实现呢?这里就需要使用到lint-staged工具来识别被加入到stage区文件。
1
2
3
4
5
6
7
8
9
10"scripts": {
"precommit": "lint-staged"
},
"lint-staged": {
"src/**/*.js": [
"eslint --fix --ext .js",
"prettier --write",
"git add"
]
}在进行git commit的时候会触发到git hook进而执行precommit,而precommit脚本引用了lint-staged配置表明只对git add到stage区的文件进行扫描,具体lint-staged做了三件事:
1、执行eslint –fix操作,进行扫描,若发现工具可修复的问题进行fix;
2、执行prettier脚本,这是对代码进行格式化的;
3、上述两项任务完成后对代码重新add。
prettier
prettier工具主要用来统一代码格式,eslint也会对代码进行一定程度的格式校验,但主要用来对代码规范的扫描,而prettier则是专门用来对代码进行格式化,两个工具各司其职,为代码质量保驾护航。它的主要原理是将格式化前的代码和格式化后的代码进行对比,如果发现不一样,prettier就会对其进行标记并按照指定的格式化规范进行修复。
附加内容
editorconfig介绍
当多人共同开发一个项目时,每个人使用的编辑器各不相同,为了对编辑器统一代码风格,引入了editorconfig。
用editorconfg解决上述问题的步骤:
- 在项目根目录下创建一个名为 .editorconfig 的文件。该文件的内容定义改项目的编码规范。editorconfig支持的编码规范在后文会有详细的介绍。
- 安装与编辑器对应的editorconfig插件。
其工作原理是:当你再编码的时候,editorconfig插件会去查找当前编辑文件的所在文件夹或其上级文件夹中是否有 .editorconfig 文件。如果有,则编辑器的行为会与 .editorconfig 文件中定义的一致,并且其优先级高于编辑器自身的设置。