AnthonyFu的网页开发偏好与最佳实践Skill antfu

本技能详细介绍了知名开发者 Anthony Fu 在网页开发领域的技术栈偏好、工具配置与工作流最佳实践。内容涵盖包管理器(pnpm)、TypeScript 严格模式、ESM 模块、代码检查与格式化(ESLint)、单元测试(Vitest)、Git 钩子、项目文档(VitePress)以及库发布流程等。适用于希望遵循现代化、高效且一致的前端开发规范的工程师。关键词:前端开发,TypeScript,ESLint,Vitest,pnpm,VitePress,开发规范,最佳实践。

前端开发 0 次安装 0 次浏览 更新于 3/1/2026

name: antfu description: Anthony Fu 的 {个人偏好} 网页开发偏好与最佳实践 metadata: author: Anthony Fu version: “2026.1.28”

Anthony Fu 的偏好设置

此技能涵盖了 Anthony Fu 在网页开发中偏好的工具、配置和最佳实践。此技能具有强烈个人观点。

快速概览

类别 偏好
包管理器 pnpm
语言 TypeScript (严格模式)
模块系统 ESM ("type": "module")
代码检查与格式化 @antfu/eslint-config (不使用 Prettier)
测试 Vitest
Git 钩子 simple-git-hooks + lint-staged
文档 VitePress (位于 docs/ 目录)

核心技术栈

包管理器 (pnpm)

使用 pnpm 作为包管理器。

对于 monorepo 设置,使用 pnpm workspaces:

# pnpm-workspace.yaml
packages:
  - 'packages/*'

pnpm-workspace.yaml 中使用 pnpm 命名目录来管理依赖版本:

目录 用途
prod 生产环境依赖
inlined 被打包工具内联的依赖
dev 开发工具 (代码检查器、打包器、测试、开发服务器)
frontend 打包进前端的库

目录名称不限于上述,可根据需要调整。避免使用默认目录。

@antfu/ni

使用 @antfu/ni 来统一包管理器命令。它会根据 lockfile 自动检测包管理器 (pnpm/npm/yarn/bun)。

命令 描述
ni 安装依赖
ni <pkg> 添加依赖
ni -D <pkg> 添加开发依赖
nr <script> 运行脚本
nu 升级依赖
nun <pkg> 卸载依赖
nci 纯净安装 (类似 pnpm i --frozen-lockfile)
nlx <pkg> 执行包 (类似 npx)

如果找不到命令,请使用 pnpm i -g @antfu/ni 全局安装。

TypeScript (严格模式)

始终启用严格模式使用 TypeScript。

{
  "compilerOptions": {
    "target": "ESNext",
    "module": "ESNext",
    "moduleResolution": "bundler",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true
  }
}

ESM (ECMAScript 模块)

始终在 ESM 模式下工作。在 package.json 中设置 "type": "module"


代码质量

ESLint (@antfu/eslint-config)

使用 @antfu/eslint-config 进行格式化和代码检查。这消除了对 Prettier 的需求。

创建带有 // @ts-check 注释的 eslint.config.js

// @ts-check
import antfu from '@antfu/eslint-config'

export default antfu()

将脚本添加到 package.json

{
  "scripts": {
    "lint": "eslint ."
  }
}

遇到代码检查错误时,尝试使用 nr lint --fix 修复。不要添加 lint:fix 脚本。

Git 钩子 (simple-git-hooks + lint-staged)

使用 simple-git-hookslint-staged 进行提交前代码检查:

{
  "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"
  }
}

单元测试 (Vitest)

使用 Vitest 进行单元测试。

{
  "scripts": {
    "test": "vitest"
  }
}

约定:

  • 将测试文件放在源文件旁边:foo.tsfoo.test.ts (同一目录)
  • 高级别测试放在每个包的 tests/ 目录中
  • 使用 describeit API (而非 test)
  • 使用 expect API 进行断言
  • 仅对 TypeScript 空值断言使用 assert
  • 对复杂输出断言使用 toMatchSnapshot
  • 对特定语言的输出使用带有显式文件路径和扩展名的 toMatchFileSnapshot (将这些文件排除在代码检查之外)

项目设置

发布 (库项目)

对于库项目,通过由 bumpp 触发的 GitHub Releases 发布:

{
  "scripts": {
    "release": "bumpp -r"
  }
}

文档 (VitePress)

使用 VitePress 编写文档。将文档放在 docs/ 目录下。

docs/
├── .vitepress/
│   └── config.ts
├── index.md
└── guide/
    └── getting-started.md

将脚本添加到 package.json

{
  "scripts": {
    "docs:dev": "vitepress dev docs",
    "docs:build": "vitepress build docs"
  }
}

参考资料

项目设置

主题 描述 参考
@antfu/eslint-config 用于格式化和代码检查的 ESLint 扁平配置 antfu-eslint-config
GitHub Actions 使用 sxzz/workflows 的偏好工作流 github-actions
.gitignore JS/TS 项目的偏好 .gitignore gitignore
VS Code 扩展 推荐的开发扩展 vscode-extensions

开发

主题 描述 参考
应用开发 Vue/Vite/Nuxt/UnoCSS Web 应用的偏好 app-development
库开发 打包和发布 TypeScript 库的偏好 library-development
Monorepo pnpm workspaces、集中式别名、Turborepo monorepo