haskou/eslint-config
GitHub: haskou/eslint-config
面向严格 TypeScript 项目的高度规范化共享 ESLint 与 Prettier 配置,通过 type-aware 规则和复杂度约束推动代码走向显式、模块化和类型驱动。
Stars: 0 | Forks: 0
# @haskou/eslint-config
[](https://github.com/haskou/eslint-config/actions/workflows/ci.yml)
[](https://www.npmjs.com/package/@haskou/eslint-config)
[](https://github.com/haskou/eslint-config/blob/main/renovate.json)
[](./LICENSE)
面向 TypeScript 库的共享 ESLint flat config,使用:
- ESLint recommended 规则
- TypeScript parser 和 plugin
- 通过 `parserOptions.projectService` 实现的 type-aware TypeScript 规则
- Prettier 集成
- SonarJS 规则
- Perfectionist 的 import/object 排序
- unused-imports 清理
## 安装
使用 npm:
```
npm i -D eslint prettier typescript @haskou/eslint-config
```
使用 yarn:
```
yarn add -D eslint prettier typescript @haskou/eslint-config
```
使用 pnpm:
```
pnpm add -D eslint prettier typescript @haskou/eslint-config
```
ESLint plugins 和 parser 是此包的依赖项,因此使用方项目无需手动安装整个 plugin 集合。
## 代码风格
此配置是具有强烈主观色彩的。它不仅仅是“运行 Prettier 并避免未使用的变量”;它推动项目走向小型、显式、类型驱动的 TypeScript。
整体风格接近后端/服务代码:清晰的模块、每个文件一个核心概念、显式的 public/private 类成员、低认知复杂度,以及极少隐藏在松散类型中的魔法。
在实践中,它鼓励:
- 严格的 TypeScript 使用:通过 `parserOptions.projectService` 启用 type-aware linting,floating promises 被视为错误,unsafe returns 被视为错误,而 unsafe calls/arguments 至少被视为警告
- 显式的 API:导出的函数和方法需要边界类型,已知的序列化风格方法(如 `toPrimitives`)除外
- 有纪律的类结构:类成员必须有序排列,需要访问修饰符,文件不应堆积多个顶级 classes/types/interfaces,并且每个文件最多只能有一个类
- 小型方法和简单的控制流:复杂度超过 `8` 会失败,认知复杂度超过 `10` 会失败,嵌套深度超过 `3` 会发出警告,重复或可折叠的分支将由 SonarJS 报告
- 可预测的格式化:2 个空格、分号、单引号、尾随逗号、80 个字符的行宽以及箭头函数括号由 Prettier 处理
- 可预测的排序:imports 必须排序,object keys 排序违规会发出警告,而 unused imports 被视为错误
- 减少重度修改的习惯:参数重新赋值会发出警告,禁止使用 `one-var`,要求使用对象简写,并将旧的 CommonJS `require` imports 视为错误
它有意比普通的前端预设更严格。其目标是让代码读起来像经过维护的应用/领域代码:显式的边界、无趣的 diff、简短的文件、清晰的类 API,以及减少“我以后会记住这个”的假设。
## ESLint 使用说明
在使用方项目中创建 `eslint.config.mjs`:
```
import haskou from '@haskou/eslint-config';
export default haskou;
```
然后添加 scripts:
```
{
"scripts": {
"lint": "eslint .",
"lint:fix": "eslint . --fix"
}
}
```
## 自定义使用
```
import { createHaskouConfig } from '@haskou/eslint-config';
export default createHaskouConfig({
ignores: ['generated/**'],
});
```
可用选项:
```
type HaskouConfigOptions = {
files?: string[];
ignores?: string[];
javascriptFiles?: string[];
parserOptions?: Record;
testFiles?: string[];
tsconfigRootDir?: string;
};
```
## Prettier 使用说明
在使用方项目中创建 `prettier.config.mjs`:
```
import prettierConfig from '@haskou/eslint-config/prettier';
export default prettierConfig;
```
## 发布分支
CI 会根据源分支的前缀,从合并到默认分支的 pull requests 中发布 npm 版本:
| 分支前缀 | npm 版本升级 |
| --- | --- |
| `fix/*` | Patch |
| `feat/*` | Minor |
| `break/*` | Major |
其他分支名称仅运行验证,不会进行发布。
标签:ESLint, TypeScript, 代码规范, 安全插件, 自定义脚本, 静态检查