@1adybug/eslint
v0.0.11
Published
推荐的 ESLint 配置
Downloads
279
Readme
@1adybug/eslint
推荐的 ESLint Flat Config,内置 TypeScript、React、Next.js、Node.js 常见规则,并支持按目录拆分运行时环境。
安装
bun add -d eslint @1adybug/eslint快速开始
eslint.config.mjs
import config from "@1adybug/eslint"
export default config自定义配置
eslint.config.mjs
import { defineConfig } from "@1adybug/eslint"
export default defineConfig({
next: true,
react: true,
node: {
enabled: true,
preset: "script",
version: ">=24.0.0",
},
})参数说明
defineConfig(params) 支持以下参数:
next:boolean | FeatureOptionsreact:boolean | FeatureOptionsnode:boolean | FeatureOptions & { preset?: "script" | "module" | "recommended" | "mixed"; version?: string }target:"browser" | "node" | "both"directories:{ web?: string | string[]; node?: string | string[]; mixed?: string | string[] }ignores:string | string[]rules:RulesConfig
FeatureOptions:
enabled?: booleanrecommended?: booleanextends?: string | config | (string | config)[]rules?: RulesConfig
默认行为(开箱即用)
- 自动探测依赖
检测到next时默认启用 Next;检测到react(或启用 Next)时默认启用 React。 target默认推断
Next 项目默认"both";React 项目默认"browser";其他默认"node"。- Node 默认启用条件
当target !== "browser"时默认启用 Node 规则。 - Node 默认版本
目标项目未配置package.json.engines.node时,默认按>=24.0.0处理;可通过node.version覆盖。 - 目录默认值
Next + both:web = ["**/*.{js,mjs,ts,tsx}"],node = ["shared/**/*.{js,mjs,ts,tsx}", "prisma/**/*.{js,mjs,ts,tsx}", "server/**/*.{js,mjs,ts,tsx}"]。
browser:web = ["**/*.{js,mjs,ts,tsx}"]。
node:node = ["**/*.{js,mjs,ts,tsx}"]。
both:mixed = ["**/*.{js,mjs,ts,tsx}"]。 - 默认忽略目录
node_modules/**,out/**,build/**,dist/**,public/**。 - Next 额外忽略
.next/**,next-env.d.ts。 - 目录冲突保护
同一个 glob 同时出现在web/node/mixed会直接报错。 - TypeScript 默认弃用检查
TypeScript 文件默认开启@typescript-eslint/no-deprecated,并自动启用projectService;JavaScript 与声明文件不会应用这条规则。 - 内联对象类型提示
默认对const info: { name: string } = { name: "tom" }、function getName({ name }: { name: string }) {}这类内联对象类型给出警告,建议先提取为type或interface。
示例
1) Next 全栈项目(目录分区)
import { defineConfig } from "@1adybug/eslint"
export default defineConfig({
next: true,
react: true,
node: true,
directories: {
web: ["apps/web/**/*.{js,mjs,ts,tsx}"],
node: ["apps/api/**/*.{js,mjs,ts,tsx}"],
mixed: ["packages/shared/**/*.{js,mjs,ts,tsx}"],
},
})2) 纯 React 项目(关闭 Node 规则)
import { defineConfig } from "@1adybug/eslint"
export default defineConfig({
react: true,
node: false,
target: "browser",
})3) 纯 Node 库
import { defineConfig } from "@1adybug/eslint"
export default defineConfig({
next: false,
react: false,
node: {
enabled: true,
preset: "module",
version: ">=24.0.0",
rules: {
"n/no-process-exit": "off",
},
},
target: "node",
})Monorepo 使用
1) 根目录统一配置(规则基本一致时)
import { defineConfig } from "@1adybug/eslint"
export default defineConfig({
next: true,
react: true,
node: { enabled: true, preset: "module" },
directories: {
web: ["apps/web/**/*.{js,mjs,ts,tsx}", "apps/admin/**/*.{js,mjs,ts,tsx}"],
node: ["apps/api/**/*.{js,mjs,ts,tsx}", "tools/**/*.{js,mjs,ts,tsx}"],
mixed: ["packages/**/*.{js,mjs,ts,tsx}"],
},
ignores: ["**/dist/**", "**/.turbo/**", "**/coverage/**"],
})注意:
- 同一个 glob 不能同时出现在
web/node/mixed,否则会报错。 next: true时,Next 规则会应用到web + mixed目录。
2) 根配置 + 子项目配置(只有部分应用是 Next 时)
建议做法:
- 根目录配置通用规则,
next: false。 apps/web单独eslint.config.mjs开启next: true。apps/api单独配置node规则。
这样可以避免把 Next 规则应用到非 Next 项目。
本仓库开发命令
bun run build
bun run dev