antd + react model自定义footer_使用ESLint+Prettier规范React+Typescript项目

e0206ed4771010d7cc0939fbb6384526.png
项目开发过程中,大多数时候我们使用别人搭建好的脚手架编写代码,是项目的参与者。对于一些细节往往被忽略了。其中代码检测本身是一类非常简单的配置,但涉及不同框架和语言组合使用的时候,可能比想象中要困难,本文带您一起学习ts + react 项目搭建过程中的代码规范配置。

本文主要参考项目:

https://github.com/dorshinar/eslint-react-intro​github.com

主要参考文章:

https://medium.com/@dors718/linting-your-react-typescript-project-with-eslint-and-prettier-2423170c3d42​medium.com

一、ESLint

ESLint 是一个Javascript Linter,帮助我们规范代码质量,提高团队开发效率。

4cd4a30e064e652d12500cbe0e74056c.png
  1. 避免代码错误
  2. 写出最佳实践的代码
  3. 规范变量使用方式
  4. 规范代码格式
  5. 更好的使用新的语法

社区比较知名的代码规范,eslint 配合这些代码规范,能够检测出代码潜在问题,从而提高代码质量。

  • standardjs
  • airbnb

说明:ESLint 是完全插件化的。每一个规则都是一个插件并且你可以在运行时添加更多的规则。

二、Prettier

eslint 虽然能帮助我们提高代码质量,但并不能完全统一编码风格,因为这些代码规范的重点并不在代码风格上,虽然有一定的限制。

prettier 是一个能够统一团队编码风格的工具,能够极大的提高团队执行效率,统一的编码风格能很好的保证代码的可读性。

Prettier:

prettier/eslint-plugin-prettier​github.com

三、React + TypeScript 项目中该怎么选择 Linting?

最近在做 react + typescript 项目过程中,想通过合适的工具对代码进行规范以及统一编码规则。很自然的想到了 eslinttslint

3.1 TSLint

TSLint 对TypeScript 支持得很好,并且如果你使用的是 VsCode IDE,还有出色的插件支持。

可能有人会有疑问:JavaScript 语言非常灵活,所以需要相应的代码检测,而TypeScript 有强大的 类型系统 对ES6+ 的支持。 在编译过程中已经可以检测出很多问题。为什么还需要?

因为TypeScript 关注的是类型的匹配,而不是代码风格。

比如:

// 1.缩进应该是四个空格还是两个空格?
// 2.是否应该禁用 var?
// 3.接口名是否应该以 I 开头?
// 4.是否应该强制使用 === 而不是 ==?

TypeScript 不会关注上面的问题,但这些问题能够影响到团队协作效率、代码的可理解、可维护性。

例子:

let myName = 'Tom';
console.log(`My name is ${myNane}`);
console.log(`My name is ${myName.toStrng()}`);
console.log(`My name is ${myName}`)

cca25e297d91ae30dc32f9339825dc1c.png

0b2d1dd7e1192965d60bd1f60ea44e3a.png

3.2 应该使用哪种代码检查工具?

TSLint 的优点:

  • 专为 TypeScript 服务,bug 比 ESLint 少
  • 不受限于 ESLint 使用的语法树 ESTree
  • 能直接通过 tsconfig.json 中的配置编译整个项目,使得在一个文件中的类型定义能够联动到其他文件中的代码检查

ESLint 的优点:

  • 基础规则比 TSLint 多很多
  • 社区繁荣,插件众多

6a435569de52a529e1d490163d9c739c.png

3.3 BUT

参考:

TypeScript 官方决定全面采用 ESLint​www.oschina.net
f8d692ef3256634697e7d7bb0865d65b.png

由于性能问题,TypeScript 官方决定全面采用 ESLint,甚至把仓库(Repository)作为测试平台,而 ESLint 的 TypeScript 解析器也成为独立项目,专注解决双方兼容性问题。

JavaScript 代码检测工具 ESLint 在 TypeScript 团队发布全面采用 ESLint 之后,发布typescript-eslint 项目,以集中解决TypeScript 与 ESLint兼容性问题。而ESLint不再维护typescript-eslint-parser,也不会在npm 上做任何发布。TypeScript 解析器转移至Github 的 typescript-eslint/parser。

typescript-eslint/typescript-eslint​github.com
d61023d8edceffd14cf3b80ce1e62319.png
TypeScript 2019上半年发展规划​github.com

3.4 SO

虽然TSLint 很长一段时间 是Linting TypeScript 的标准,但ESLint会很快完全取代 TSLint,TSLint将被抛弃。

四、React + TypeScript 项目 Linting 搭建

4.1 使用npx创建项目

$ npx create-react-app eslint-react-intro --typescript

说明:npx 参考

4.2 安装 ESLint 解析 TypeScript 的依赖

  1. eslint:javascript代码检测工具,使用espree解析器
  2. @typescript-eslint/parser:将 TypeScript 转换为 ESTree,使 eslint 可以识别
  3. @typescript-eslint/eslint-plugin:只是一个可以打开或关闭的规则列表
$ yarn add eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin -D

4.3 配置 ESLint

1.使用eslint 交互式工具配置

$ ESLint --init

它会问你一系列问题,以帮助你配置它。

可以参考:

https://larrylu.blog/improve-code-quality-using-eslint-742cf1f384f1​larrylu.blog

2.自定义配置,添加配置文件 .eslintrc.js

module.exports = {
  parser: {},  // 解析器
  extends: [], // 继承的规则 [扩展]
  plugins: [], // 插件
  rules: {}    // 规则
};

plugin 与 extend 的区别:

  • extend 提供的是 eslint 现有规则的一系列预设
  • 而 plugin 则提供了除预设之外的自定义规则,当你在 eslint 的规则里找不到合适的的时候就可以借用插件来实现了

为了使配置能够正常运行,我们需要配置 解析器、插件、规则集等。

module.exports = {
  parser: "@typescript-eslint/parser",
  extends: ["plugin:@typescript-eslint/recommended"],
  plugins: ["@typescript-eslint"],
  rules: {}
};

我们已经告诉ESLint 怎样正确解析 TypeScript 代码,并且使用了一组推荐的插件规则(extends字段选项中的配置)。

3. 接下来我们将为 React 添加基本规则

此规则,由Create React App团队提供

module.exports = {
  parser: "@typescript-eslint/parser",
  extends: ["plugin:@typescript-eslint/recommended", "react-app"],
  plugins: ["@typescript-eslint", "react"],
  rules: {}
};

我们对 TypeScript 和 React 进行了 规范(linting),此时需要选择一种代码格式化程序。前面提到的Prettier 将是首选工具,因为它在检测和修复样式错误方面做的很出色,并且和ESLint有很好的集成。

4. 安装 prettier 依赖

$ yarn add prettier eslint-config-prettier eslint-plugin-prettier -D
  1. prettier: 格式化规则程序
  2. eslint-config-prettier: 将禁用任何可能干扰现有 prettier 规则的 linting 规则
  3. eslint-plugin-prettier: 将作为ESlint 的一部分运行 Prettier分析。
module.exports = {
  parser: '@typescript-eslint/parser',
  extends: [
    'plugin:@typescript-eslint/recommended',
    'react-app',
    'plugin:prettier/recommended',
  ],
  plugins: ['@typescript-eslint', 'react'],
  rules: {},
};

5. Visual Studio Code 集成 ESLint 与 Prettier

48908a7545f3b28bc04276472380ec3b.png

40c0bab4b7055d04ae9745150e5d5c6d.png

最后,虽然默认配置(setting.json)已经很好,但默认只检测.js*.jsx文件,我们还需要配置typescripe,同时我们也希望有自动修复功能(有些是不可能自动修复)。

user settings workspace settings:user settings 里面是更通用的设置,workspace settings 是跟随项目存在,可以做到团队统一。

69cc6d05440afe56cbfc36b80a42a098.png
"eslint.validate": [
    "javascript",
    "javascriptreact",
    {
      "language": "typescript",
      "autoFix": true
    },
    {
      "language": "typescriptreact",
      "autoFix": true
    }
]

6.使用 husky,提交检测(可选)

https://github.com/typicode/husky​github.com

结合自己团队实际情况,是否选择,建议使用。

$ yarn add husky -D
// package.json
{
  "husky": {
    "hooks": {
      "pre-commit": "npm test",
      "pre-push": "npm test",
      "...": "..."
    }
  }
}

五、总结

ESList:@typescript-eslint项目取代 tslint

TSLint:逐渐被舍弃

Prettier:统一代码风格

VSCode:在setting.json中设置,可以集成 ESLint、Prettier 等规则,并能自动修复。


Linting Your React+Typescript Project with ESLint and Prettier!​medium.com 自然醒:使用ESLint+Prettier来统一前端代码风格​zhuanlan.zhihu.com
94c31ce8a110b985f9ad2706344d5857.png
https://standardjs.com/readme-zhcn.html​standardjs.com https://larrylu.blog/improve-code-quality-using-eslint-742cf1f384f1​larrylu.blog TypeScript 官方决定全面采用 ESLint​www.oschina.net
f8d692ef3256634697e7d7bb0865d65b.png
https://medium.com/@oliver.grack/using-eslint-with-typescript-and-react-hooks-and-vscode-c583a18f0c75​medium.com
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值