Open forthealllight opened 5 years ago
使用了Prettier就不需要再配置eslint的rules了吗
使用了Prettier就不需要再配置eslint的rules了吗
当然不是,prettier仅仅是代码缩进等格式
使用了Prettier就不需要再配置eslint的rules了吗
prettier 仅仅是格式化代码,和 editorconfig 是一种类型,不过 editorconfig 是和你的IDE绑定以插件形式修改代码。prettier 先进一点,和项目绑定。
eslint 就不一样了,能 check 你的代码风格和简单的错误,比如 no-console 这种。
对于Typescript项目的编码规范而言,主要有两种选择ESLint和TSLint。ESLint不仅能规范js代码,通过配置解析器,也能规范TS代码。此外由于性能问题,TypeScript 官方决定全面采用ESLint,甚至把仓库作为测试平台,而 ESLint 的 TypeScript 解析器也成为独立项目,专注解决双方兼容性问题。 最近在我的项目的编码规范中全量的用ESLint代替了TSLint,针对其中遇到的问题做一个记录。
一、用ESLint来规范Typescript代码
首先安装依赖:
这三个依赖分别是:
安装好这3个依赖包之后,在根目录下新建.eslintrc.js文件,该文件中定义了ESLint的基础配置,一个最为简单的配置如下所示:
二、用ESLint来规范React代码
如果在你的TS项目中同时使用了React,那么为了检测和规范React代码的书写必须安装插件eslint-plugin-react,然后增加配置:
在Rules中可以自定义你的React代码编码规范。
三、结合Prettier和ESLint来规范代码
Prettier中文的意思是漂亮的、美丽的,是一个流行的代码格式化的工具,我们来看如何结合ESLint来使用。首先我们需要安装三个依赖:
其中:
然后在项目的根目录下创建.prettierrc.js文件:
接着修改.eslintrc.js文件,引入prettier:
上述新增的extends的配置中:
prettier/@typescript-eslint:使得@typescript-eslint中的样式规范失效,遵循prettier中的样式规范
plugin:prettier/recommended:使用prettier中的样式规范,且如果使得ESLint会检测prettier的格式问题,同样将格式问题以error的形式抛出
四、在VSCode中集成ESLint配置
为了开发方便我们可以在VSCode中集成ESLint的配置,使得代码在保存或者代码变动的时候自动进行ESLint的fix过程。
首先需要安装VSCode的ESLint插件,安装插件完毕后,在settings.json文件中修改其配置文件为:
主要注意的有两点:
eslint.options中可以通过configFile属性来执行eslint规范的绝对路径,默认会向上查找,在根路径中指定。
eslint.validate中必须通过{ language: XXX}的形式来指定typescript和typescriptreact
五、husky和lint-staged构建代码工作流
首先来看husky,Husky 能够帮你阻挡住不好的代码提交和推送,首先我们在package.json中定义如下的script:
接着在package.json定义husky的配置:
我们在git的hook的阶段来执行相应的命令,比如上述的例子是在pre-commit这个hook也就是在提交之前进行lint的检测。
接着来看lint-staged,上述我们通过在husky的pre-comit这个hook中执行一个npm命令来做lint校验。除了定义个npm lint命令外,我们也可以直接通过使用lint-staged,来在提交前检测代码的规范。 使用lint-staged来规范代码的方式如下,我们修改package.json文件为:
同样在git commit的时候会做lint的检测。
六、gitlab的CI/CD来规范代码
仅仅通过git的hook来执行代码的规范检测有一个问题,我们可以在git commit的时候通过--no-verify来跳过代码的规范检测。但是某些情况下,我们对于某一个重要分支,该分支上的代码必须完整通过代码的规范检测,此时我们可以使用gitlab的CI/CD。
同样在package.json中增加一个lint的npm 命令:
然后在根目录增加.gitlab-ci.yml文件,该文件中的配置为:
然后配置相应的gitlab runner,这里不具体详描,最后的结果就是在我们指定的分支上的提交或者merge都会进行所配置的命令检测。这样保证了特定分支不受git commit跳过操作--no-verify的影响。