关于 antfu
antfu 是面向 TypeScript 项目的编码规范 skill,涵盖代码组织、运行时兼容、测试和工具选择,也整理了 ESLint、pnpm 等项目约定。
主要功能
- 01按职责组织文件
- 02编写跨运行时代码
- 03TypeScript 类型规范
- 04Vitest 测试约定
- 05依赖与包管理工具
- 06ESLint、Git hooks 与 pnpm 配置
适用场景
- 01组织源文件与类型定义
- 02使用 Vitest 编写测试
- 03通过 @antfu/ni 管理依赖
- 04配置 lint 与 Git hooks
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ hairyf/ skills --skill antfu安装后在 Claude Code 中输入/antfu确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/antfu-eslint-config.mdapp-development.mdlibrary-development.mdmonorepo.mdsetting-up.md详细介绍
编码实践
代码组织
- 单一职责:每个源文件都应有清晰、聚焦的范围/用途
- 拆分大文件:当文件变得过大或处理过多关注点时,应将其拆分
- 类型分离:始终将类型和接口分离到
types.ts或types/*.ts - 常量提取:将常量移至专门的
constants.ts文件
运行时环境
- 优先同构代码:尽可能编写在 Node、浏览器和 worker 中均可运行的运行时无关代码
- 清晰的运行时指示:当代码特定于某个环境时,在文件顶部添加注释:
// @env node
// @env browser
TypeScript
- 显式返回类型:尽可能显式声明返回类型
- 避免复杂的内联类型:将复杂类型提取到专门的
type或interface声明中
注释
- 避免不必要的注释:代码应自解释
- 解释"为什么"而非"怎么做":注释应描述理由或意图,而不是代码做了什么
测试(Vitest)
- 测试文件:
foo.ts→foo.test.ts(同一目录) - 使用
describe/itAPI(而非test) - 对于复杂输出使用
toMatchSnapshot - 对于特定语言的快照,使用带显式路径的
toMatchFileSnapshot
工具选择
@antfu/ni 命令
| 命令 | 描述 |
|---|---|
ni | 安装依赖 |
ni <pkg> / ni -D <pkg> | 添加依赖 / 开发依赖 |
nr <script> | 运行脚本 |
nu | 升级依赖 |
nun <pkg> | 卸载依赖 |
nci | 干净安装(pnpm i --frozen-lockfile) |
nlx <pkg> | 执行包(npx) |
检查 npm 包版本
使用 fast-npm-meta 查询包的最新版本——它查询一个小型元数据端点,而不是下载完整的注册表负载(每个包可能达到数兆字节)。
nlx fast-npm-meta version vite # 7.3.1
nlx fast-npm-meta version "nuxt@^3.5" # 3.5.22 — range-aware
nlx fast-npm-meta version vite nuxt vue # multiple at once
nlx fast-npm-meta version vite --json # JSON for scripting
nlx fast-npm-meta full vite # full version list + dist-tags
当你只需要最新版本时,优先使用此方法而不是 npm view <pkg> version,也优于直接从注册表读取 package.json。
TypeScript 配置
{
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"moduleResolution": "bundler",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true
}
}
ESLint 设置
// eslint.config.mjs
import antfu from '@antfu/eslint-config'
export default antfu()
完成任务时,运行 pnpm run lint --fix 来格式化代码并修复编码风格。
有关详细配置选项:antfu-eslint-config
Git Hooks
{
"simple-git-hooks": {
"pre-commit": "pnpm i --frozen-lockfile --ignore-scripts --offline && npx lint-staged"
},
"lint-staged": { "*": "eslint --fix" },
"scripts": {
"prepare": "npx simple-git-hooks"
}
}
pnpm Catalogs
在 pnpm-workspace.yaml 中使用命名 catalog 进行版本管理:
| Catalog | 用途 |
|---|---|
prod | 生产依赖 |
inlined | 打包器内联依赖 |
dev | 开发工具(linter、bundler、测试) |
frontend | 前端库 |
避免使用默认 catalog。Catalog 名称可根据项目需求调整。
参考资料
| 主题 | 描述 | 参考 |
|---|---|---|
| ESLint Config | 框架支持、格式化器、规则覆盖、VS Code 设置 | antfu-eslint-config |
| Project Setup | .gitignore、GitHub Actions、VS Code 扩展 | setting-up |
| App Development | Vue/Nuxt/UnoCSS 约定和模式 | app-development |
| Library Development | tsdown 打包、纯 ESM 发布 | library-development |
| Monorepo | pnpm workspaces、集中式 alias、Turborepo | monorepo |
评论
支持 Markdown