团队协作(一)—— 你不知道的 ESLint + Prettier3

简介: 团队协作(一)—— 你不知道的 ESLint + Prettier3

4.3.4 添加 TypeScript 扩展配置

这是一个 Vue3 + TS 的项目,当然还需要检测 TS 语法。


29.jpg


打开 HelloWorld.vue 就发现了 TS 相关的错误。

安装 Vue 专用的 TS 扩展配置:

npm install --save-dev @vue/eslint-config-typescript @rushstack/eslint-patch

在配置文件 .eslintrc.cjs 中添加配置:

require('@rushstack/eslint-patch/modern-module-resolution')
module.exports = {
  env: {
    node: true,
  },
  extends: [
    'eslint:recommended',
    'plugin:vue/vue3-recommended',
    '@vue/eslint-config-typescript/recommended',
    '@vue/eslint-config-prettier',
  ],
  rules: {
    // override/add rules settings here, such as:
    // 'vue/no-unused-vars': 'error'
  },
}

注意,始终让 prettier 相关配置留在 extends 数组的最后一位。

之后,问题解决:


30.jpg


4.3.5 其他配置添加

在 .eslintrc.cjs 中添加了几个常见配置:

require('@rushstack/eslint-patch/modern-module-resolution')
module.exports = {
  env: {
    node: true,
    browser: true,
    es2021: true,
  },
  parserOptions: {
    ecmaVersion: 'latest',
    sourceType: 'module',
  },
  extends: [
    'eslint:recommended',
    'plugin:vue/vue3-recommended',
    '@vue/eslint-config-typescript/recommended',
    '@vue/eslint-config-prettier',
  ],
  rules: {
    // override/add rules settings here, such as:
    // 'vue/no-unused-vars': 'error'
  },
}

在 .prettierrc.json 中添加了几个常见规则:

{
  "semi": false,
  "singleQuote": true,
  "tabWidth": 2,
  "useTabs": false,
  "bracketSpacing": true
}

4.3.6 添加终端命令

除了在配置文件中加入相关配置,命令行也可以。

在 package.json 中的 script 中添加两条命令:

"lint": "eslint --ext .js,.ts,.vue --ignore-path .gitignore --fix src",
"format": "prettier . --write --ignore-path .gitignore"
  • lint 命令通过 eslint 来对 src 目录下后缀为 .js 和 .vue 的文件进行代码检查和修复
  • --ext :指定需要检测的后缀文件,这里是 js, ts, vue,https://eslint.org/docs/latest/user-guide/command-line-interface#--ext
  • --ignore-path :指定 .eslintignore 的替代文件,上面用的是 .gitignore 作为忽略检测的文件项,https://eslint.org/docs/latest/user-guide/command-line-interface#--ignore-path
  • --fix:修复不符合规则的代码,eslint.org/docs/latest…
  • src:表示修复 src 目录下的所有文件。
  • format 命令通过 prettier 来格式化代码
  • --write :相当于 eslint --fixprettier.io/docs/en/cli…
  • --ignore-path:同 eslint 的对应命令,prettier.io/docs/en/cli…
  • .:表示对当前目录进行代码格式化。

4.3.7 使用终端命令

现在尝试运行 npm run lint 来检测和修复代码:


31.jpg


vite-env.d.ts 出现了 3 个问题,2 个错误和 1 个警告。

针对这些问题,按照给出的提示,做对应调整就行。

或者调整 .eslintrc.cjs 的规则细节:

require('@rushstack/eslint-patch/modern-module-resolution')
module.exports = {
  // other options
  rules: {
    // override/add rules settings here, such as:
    // 'vue/no-unused-vars': 'error'
    '@typescript-eslint/ban-types': [
      'error',
      {
        extendDefaults: true,
        types: {
          '{}': false,
        },
      },
    ],
    '@typescript-eslint/no-explicit-any': 0,
  },
}

之后,再次运行就不会报错了。

现在把 App.vue 文件中的代码格式打乱,变成屎山风格:


32.jpg


运行 npm run format 来格式化代码,摇身一变大漂亮:


33.jpg


4.3.8 小节

以上,我们自行配置了 ESLint + Prettier,可以实现保存时,根据配置的规则,自动检查并修复代码。另外一方面,可以通过命令行来实现相关流程。

那么问题来了,既然我们已经给 VSCode 设置了保存时自动修复,那么为什么还要设置命令行相关命令呢?这个问题和 CI 有关,我先挖个坑留着。(这篇实在太长了,如果你能看到这,我得给你赞哈哈哈)


五、总结

在 Vue3 + TS 项目中配置 ESLint + Prettier 基本就是这些内容了,更多的细节可以自己去查阅官网。接下来,整理一下整个流程:

如果你不想自己手动配置,那么就使用 create-vue 脚手架来自动添加 ESLint + Prettier 吧,或者使用ESLint 初始化 npm init @eslint/config

如果你想要自己配置,那么就使用 Vite 来创建项目,然后按照以下步骤来配置:

  1. 在 IDE 中添加 ESLint、Prettier 插件,并设置保存时自动修复;
  2. 使用 vite 搭建脚手架,以此为基点,安装并配置 prettier ,安装并配置 eslint;
  3. 在 eslint 配置文件中,添加 prettier 和 typescript 相关扩展配置;
  4. 分别添加 lint 和 format 的终端命令。

另外,我还想补充或强调一些重要的 stuff:

  1. ESLint 和 Prettier 都有配置文件,各种类型,但作用是一样的。
  1. Configuration File in ESLint


34.jpg


  1. Configuration File in Prettier


35.jpg


  1. 相对的,还有一组 Ignoring Code 文件,用来指定不需要检查的文件,也可以使用 CLI 命令 --ignore-path ,在 4.3.6 中有提到。
  1. .eslintignoreeslint.org/docs/latest…
  2. .prettierignoreprettier.io/docs/en/ign…
  1. 优先级问题,配置文件的优先级大于 IDE 的设置(settings.json),建议把设置里的关闭,采用配置文件。
  2. ESLint 的规则(rules)除了在配置文件中设置,还可以通过注释的方式使用:eslint.org/docs/latest…
  3. 局部范围内禁用一部分 ESLint 的规则(rules)的方式:eslint.org/docs/latest…
  4. ESLint 配置文件中的 extends 字段,遇到以 eslint-config- 为前缀的扩展配置,可以省略前缀。例如,eslint-config-prettier 可以简写为 prettier@vue/eslint-config-prettier 可以简写为:@vue/prettier 等等。eslint.org/docs/latest…
  5. 同理,ESLint 配置文件中的 plugins 字段,遇到以 eslint-plugin- 为前缀的插件,也可以省略前缀。eslint.org/docs/latest…
  6. ESLint 配置文件中,prettier 相关的扩展配置需要放在 extends 数组的最后一位,避免影响格式化。
  7. 在使用 VSCode 时,保存代码时会自动格式化,右下角的通知会提示你选择格式化插件,选 Prettier 即可。

ESLint + Prettier 很好地解决了代码质量检查和格式化的问题,解放了 Code Review 中代码规范方面的巨大压力。1.3 节还提到了 editorconfig + husky + commitlint,至于这些组合为什么出现,将在团队协作系列的下篇剖析,大家敬请期待~


目录
相关文章
|
XML C# 数据格式
WPF技术之xmlns
在WPF中,xmlns是XML命名空间(XML Namespace)的缩写,用于引入不同的XML命名空间,以便在XAML文件中使用特定的命名空间中的元素、属性和类型。
691 1
|
JavaScript
JS绑定事件的三种方法(简单易懂)
JS绑定事件的三种方法(简单易懂)
|
JavaScript
JS中改变this指向的六种方法
JS中改变this指向的六种方法
|
SQL SpringCloudAlibaba Kubernetes
SpringCloudAlibaba篇(六)整合Seata(微服务分布式事务nacos+seata)
SpringCloudAlibaba篇(六)整合Seata(微服务分布式事务nacos+seata)
1746 0
SpringCloudAlibaba篇(六)整合Seata(微服务分布式事务nacos+seata)
|
10月前
|
JSON 文字识别 数据可视化
Qwen2-VL微调实战:LaTex公式OCR识别任务(完整代码)
《SwanLab机器学习实战教程》推出了一项基于Qwen2-VL大语言模型的LaTeX OCR任务,通过指令微调实现多模态LLM的应用。本教程详述了环境配置、数据集准备、模型加载、SwanLab集成及微调训练等步骤,旨在帮助开发者轻松上手视觉大模型的微调实践。
|
11月前
|
Oracle 关系型数据库 MySQL
Centos7下图形化部署单点KFS同步工具并将Oracle增量同步到KES
Centos7下图形化部署单点KFS同步工具并将Oracle增量同步到KES
Centos7下图形化部署单点KFS同步工具并将Oracle增量同步到KES
|
Java 开发工具
开发工具系类 之 Cannot determine path to ‘tools.jar‘ library for 17 (D:/Program Files/Java/jdk-17.0.9)
这篇文章讲述了作者在升级JDK至17版本后遇到IDEA无法识别`tools.jar`的问题,并提供了两种解决方法:升级IDEA版本或降低JDK版本,并提供了相关版本的IDEA兼容性信息。
开发工具系类 之 Cannot determine path to ‘tools.jar‘ library for 17 (D:/Program Files/Java/jdk-17.0.9)
|
存储 索引 Python
字典是怎么实现的,它的底层结构长什么样子?
字典是怎么实现的,它的底层结构长什么样子?
295 2
|
应用服务中间件 API 网络安全
运维笔记:宿主机转发实现多容器复用CA证书
运维笔记:宿主机转发实现多容器复用CA证书
204 4
|
JavaScript
js多条件筛选(可单条件搜索还可以模糊查询)
js多条件筛选(可单条件搜索还可以模糊查询)
422 0
下一篇
oss教程