用途
该技能用于配置和维护 ESLint 与 Prettier 的共享工具链,覆盖 ESLint 9/10 的 flat config、typescript-eslint v8+ 的类型化检查、Prettier v3.0+ 的共享格式化配置,以及两者的集成。它属于构建期工具,不涉及运行时代码。
主要能力
- ESLint 9+ flat config:使用来自 eslint/config 的 defineConfig() 与 globalIgnores(),替代旧版 .eslintrc。
- typescript-eslint v8+:通过 projectService: true 自动发现最近的 tsconfig.json,替代手动 project 路径。
- Prettier 共享配置:统一格式化选项,如 printWidth、semi、singleQuote、bracketSpacing、arrowParens、endOfLine、bracketSameLine 等。
- 集成:使用 eslint-config-prettier 关闭与 Prettier 冲突的格式化规则;使用 eslint-plugin-only-warn 将错误转为警告。
- 共享配置模式:为 monorepo 或团队抽取共享配置包,避免配置漂移。
- 自定义规则:如 import/no-default-export、@typescript-eslint/consistent-type-imports、@typescript-eslint/no-unused-vars 等。
- extends 属性(ESLint 9.15+):简化插件组合与配置合并。
使用方式
核心配置示例(来自资料):
// eslint.config.ts
import js from "@eslint/js";
import { defineConfig, globalIgnores } from "eslint/config";
import tseslint from "typescript-eslint";
import eslintConfigPrettier from "eslint-config-prettier";
import * as onlyWarnPlugin from "eslint-plugin-only-warn";
export default defineConfig(
globalIgnores(["dist/**", "generated/**", "node_modules/**"]),
js.configs.recommended,
eslintConfigPrettier,
tseslint.configs.recommended,
{ plugins: { "only-warn": onlyWarnPlugin } }, // must be last
);
typescript-eslint 的 projectService 配置:
parserOptions: {
projectService: true,
allowDefaultProject: ["*.config.ts", "*.config.mjs"],
},
Prettier 共享配置示例:
// prettier.config.mjs
const config = {
printWidth: 100,
semi: true,
singleQuote: false,
bracketSpacing: true,
arrowParens: "always",
endOfLine: "lf",
bracketSameLine: false,
// trailingComma: "all" is the default in Prettier 3.0+
};
export default config;
自定义规则示例:
export const customRules = {
rules: {
"import/no-default-export": "warn",
"@typescript-eslint/consistent-type-imports": [
"warn",
{ prefer: "type-imports" },
],
"@typescript-eslint/no-unused-vars": [
"warn",
{ argsIgnorePattern: "^_", varsIgnorePattern: "^_" },
],
},
};
extends 属性示例(ESLint 9.15+):
export default defineConfig({
files: ["**/*.ts", "**/*.tsx"],
extends: [
"eslint/recommended",
tseslint.configs.recommended,
// Add your framework plugin's flat config here
],
rules: { "no-console": "warn" },
});
适用场景
- 搭建 ESLint 9/10 flat config(独立或共享)。
- 配置 Prettier 共享配置。
- 从旧版 .eslintrc 迁移到 flat config。
- 集成 ESLint 与 Prettier。
- 配置 typescript-eslint v8+ 的 projectService。
- 设置自定义 ESLint 规则(命名导出、导入限制、类型导入等)。
限制与注意事项
- 不适用于运行时代码、CI/CD 流水线配置、Git hooks 或 lint-staged、TypeScript 编译器配置(tsconfig)、打包器配置。
- ESLint 10(2026 年 2 月发布)完全移除 .eslintrc 支持,需迁移到 flat config。
- ESLint 10 要求 Node.js ^20.19.0 || ^22.13.0 || >=24(明确不支持 v21.x 与 v23.x)。
- only-warn 插件必须最后加载,才能将前面插件的错误转为警告。
- defineConfig() 会自动展平数组,不要使用展开运算符。
- projectService 需要 typescript-eslint v8+(v6-v7 中为 EXPERIMENTAL_useProjectService)。
- Prettier TypeScript 配置文件(.prettierrc.ts)需要 Node.js 22.6.0+;在 Node v24.3.0 之前需使用 --experimental-strip-types。
- Prettier 3.0+ API 为异步,使用同步 API 的插件需迁移(可用 @prettier/sync 提供同步包装)。
- ESLint 9.34+ 可通过 --concurrency 启用多线程 lint(大型项目性能提升 30-300%)。
- ESLint 10 中 /* eslint-env */ 注释会触发错误,已弃用的 Linter 方法被移除。
- 资料未提供具体安装命令、价格或收费信息。