SuperAPI AI 工具集

shared-tooling-eslint-prettier

编程与开发

查看项目

更新于 10-16 08:25

技能介绍

用途

该技能用于配置和维护 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 方法被移除。
  • 资料未提供具体安装命令、价格或收费信息。