Eslint、Prettier、.vscode 配置

Eslint、Prettier、.vscode 配置

首先,三者关联及各自作用

  • ESLint 做语法和规范校验,结合 Prettier 负责格式化。
  • .vscode 通过 ESLint 插件自动运行校验和修复,保证团队开发体验统一。

其次 EslintPrettier 的关联

  • Prettier 负责代码的排版和格式,保证风格统一,省去开发者争论格式问题时间。
  • ESLint 负责代码规范和质量,发现潜在问题和错误,保持代码健康。
  • 同时用的话,Prettier 负责格式ESLint 负责规范,两者互不冲突,搭配更完美。

开发配置示例

接下来是一套适合 React + Vite + TypeScript 项目,结合 ESLint + Prettier + VS Code 的完整配置示例,保证团队开发体验统一且规范。

1. 安装依赖

npm install --save-dev eslint prettier @eslint/js eslint-plugin-react eslint-plugin-react-hooks eslint-plugin-jsx-a11y @typescript-eslint/eslint-plugin @typescript-eslint/parser eslint-plugin-prettier eslint-config-prettier
// 依赖列表

eslint 
prettier
@eslint/js
eslint-plugin-react
eslint-plugin-react-hooks
eslint-plugin-jsx-a11y
@typescript-eslint/eslint-plugin
@typescript-eslint/parser
eslint-plugin-prettier
eslint-config-prettier

2. eslint.config.js

// eslint.config.js

// 引入官方推荐的 JS 基础规则(等同于 "eslint:recommended")
import js from '@eslint/js';
// 引入 TypeScript ESLint 插件和解析器(包含推荐规则)
import tseslint from 'typescript-eslint';
// 引入 React、React Hooks、可访问性(a11y)相关 ESLint 插件
import pluginReact from 'eslint-plugin-react';
import pluginReactHooks from 'eslint-plugin-react-hooks';
import pluginJsxA11y from 'eslint-plugin-jsx-a11y';
// 引入 prettier 插件(用于让 ESLint 检查 Prettier 格式问题)
import pluginPrettier from 'eslint-plugin-prettier';
// 引入 prettier 配置文件,传入 ESLint 中校验 prettier 规则(可选)
import prettierConfig from './prettier.config.js';

/** @type {import("eslint").Linter.FlatConfig[]} */
// Flat Config 是一种基于数组的配置方式,每个对象对应一类文件或规则
export default [
  {
    // 匹配需要被 ESLint 校验的文件
    files: ['**/*.{js,cjs,mjs,ts,tsx,jsx}'],
    // 配置解析器和语言环境
    languageOptions: {
      parser: tseslint.parser, // 使用 TypeScript 的解析器
      parserOptions: {
        ecmaVersion: 'latest', // 支持最新 ECMAScript 语法
        sourceType: 'module',  // 支持 ES 模块
        ecmaFeatures: {
          jsx: true, // 支持 JSX
        },
      },
    },
    // 注册使用到的插件
    plugins: {
      react: pluginReact,
      'react-hooks': pluginReactHooks,
      'jsx-a11y': pluginJsxA11y,
      prettier: pluginPrettier,
    },
    // 合并推荐规则 + 自定义规则
    rules: {
      // 官方 JS 推荐规则(比如禁止未定义变量)
      ...js.configs.recommended.rules,
      // TypeScript 推荐规则(比如类型注解错误、any 等)
      ...tseslint.configs.recommended.rules,
      // React 推荐规则(比如 prop 校验)
      ...pluginReact.configs.recommended.rules,
      // 可访问性规则(比如图片缺少 alt 属性)
      ...pluginJsxA11y.configs.recommended.rules,
      // React Hooks 推荐规则(比如 useEffect 必须传依赖数组)
      ...pluginReactHooks.configs.recommended.rules,
      // 启用 prettier 规则(会把 prettier 的格式问题当成 ESLint error)
      'prettier/prettier': ['error', prettierConfig],
      // 关闭 React 17+ 中不再需要的规则(无需 import React)
      'react/react-in-jsx-scope': 'off',
    },
    // 额外配置插件所需的环境(如 react 版本自动识别)
    settings: {
      react: {
        version: 'detect',
      },
    },
  },
];

3. prettier.config.js

// prettier.config.js
/** @type {import("prettier").Config} */
export default {
  // 每行最大长度(超过就换行)
  printWidth: 100,
  // 缩进的空格数(比如 2 表示缩进为两个空格)
  tabWidth: 2,
  // 每行末尾是否加分号(true 表示加)
  semi: true,
  // 使用单引号代替双引号(比如 'hello' 而不是 "hello")
  singleQuote: true,
  // 多行对象或数组的最后一项是否加逗号(es5 表示对象/数组/函数参数中尾项加逗号)
  trailingComma: 'es5',
  // 对象中的大括号是否有空格(true 表示 `{ foo: bar }` 而不是 `{foo: bar}`)
  bracketSpacing: true,
  // 箭头函数的参数是否加括号(always 表示即使只有一个参数也加括号,如 `(x) => x`)
  arrowParens: 'always',
  // 设置换行符风格(auto 表示跟随系统,避免 git diff 因换行符差异)
  endOfLine: 'auto',
  // 引入 Prettier 插件:自动对 Tailwind CSS 类名进行排序
  plugins: ['prettier-plugin-tailwindcss'],
};

4. .vscode/settings.json

// .vscode/settings.json
{
  // 禁用 VS Code 自带的保存时自动格式化功能(交由 ESLint 处理)
  "editor.formatOnSave": false,
  // 禁用默认格式化器,避免与 ESLint/Prettier 冲突
  "editor.defaultFormatter": null,
  // 配置 VS Code 中哪些文件类型由 ESLint 插件进行校验
  "eslint.validate": [
    "javascript",         // 普通 JS 文件
    "javascriptreact",    // React 中的 JS(.jsx)
    "typescript",         // TypeScript 文件
    "typescriptreact"     // React 中的 TS(.tsx)
  ],
  // 启用保存时的代码操作功能(Code Action),用于触发 ESLint 的自动修复
  "editor.codeActionsOnSave": {
    "source.fixAll": true,           // 启用所有类型的修复(包括 ESLint 和其他插件)
    "source.fixAll.eslint": true     // 启用 ESLint 的自动修复(比如修复格式、空格、变量未使用等)
  }
}

最终结构

my-project/
├─ .vscode/
│  └─ settings.json
├─ eslint.config.js 
├─ prettier.config.js 
├─ package.json
├─ src/
│  └─ ...

### 优化后的 PrettierVSCode 的 `settings.json` 配置 以下是一个经过优化的配置方案,专门针对 JavaScript 和 TypeScript 的代码格式化需求,并启用了保存时自动格式化以及 ESLint 修复功能。 #### 完整配置示例 ```json { "[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "prettier.tabWidth": 2, "prettier.useTabs": false, "prettier.singleQuote": true, "prettier.semi": false, "prettier.trailingComma": "all", "editor.formatOnSave": true, "editor.codeActionsOnSave": { "source.fixAll.eslint": true }, "eslint.validate": ["javascript", "typescript"], "eslint.run": "onSave", "prettier.requireConfig": false, "prettier.configPath": "./.prettierrc", "prettier.ignorePath": ".prettierignore", "files.insertFinalNewline": true, "editor.codeActionsOnSave": { "source.organizeImports": true } } ``` - `[javascript]` 和 `[typescript]` 设置分别指定了这两种语言的默认格式化工具为 Prettier 插件[^1]。 - `prettier.tabWidth` 将缩进宽度设定为 2 个空格[^1]。 - `prettier.useTabs` 禁用 Tab 键作为缩进方式[^1]。 - `prettier.singleQuote` 启用单引号风格[^1]。 - `prettier.semi` 关闭分号自动添加功能[^1]。 - `prettier.trailingComma` 对对象和数组的最后一项添加尾随逗号[^1]。 - `editor.formatOnSave` 开启保存时自动格式化的功能[^1]。 - `editor.codeActionsOnSave.source.fixAll.eslint` 在保存时触发 ESLint 自动修复操作[^1]。 - `eslint.validate` 指定验证的目标语言为 JavaScript 和 TypeScript[^1]。 - `eslint.run.onSave` 让 ESLint 只在文件保存时运行[^1]。 - `prettier.requireConfig` 不强制要求本地存在 `.prettierrc` 文件[^1]。 - `prettier.configPath` 明确指定项目的 Prettier 配置文件路径[^1]。 - `prettier.ignorePath` 指向 `.prettierignore` 文件来忽略某些不需要格式化的文件或目录[^1]。 - `files.insertFinalNewline` 确保每个文件末尾都有一个空白行[^1]。 - `editor.codeActionsOnSave.source.organizeImports` 在保存时自动整理导入语句[^1]。 --- #### 注意事项 1. **插件依赖** 确保已安装以下两个扩展插件: - Prettier - Code formatter (`esbenp.prettier-vscode`) - ESLint (`dbaeumer.vscode-eslint`) 2. **全局与项目级配置冲突处理** 如果项目根目录中有 `.prettierrc` 或 `.eslintrc` 文件,则优先遵循这些文件中的规则。可以通过调整 `prettier.configPath` 来明确指定配置文件的位置[^1]。 3. **性能优化建议** 当项目较大时,频繁执行保存时的操作可能会导致延迟。可以考虑仅对修改过的部分启用格式化或禁用不必要的检查选项[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值