Files
2026-07-13 21:37:05 +08:00

158 lines
2.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 项目配置
## 单包
```bash
# 克隆启动模板
cp -r ~/templates/antfu/starter-ts my-lib
cd my-lib && rm -rf .git && git init
pnpm install
```
或者手动配置:
```bash
mkdir my-lib && cd my-lib
pnpm init
pnpm add -D typescript tsdown vitest eslint @antfu/eslint-config
```
### 目录结构
```
my-lib/
├── src/
│ ├── index.ts # 主入口
│ └── types.ts # 类型定义
├── test/
│ └── index.test.ts
├── dist/ # 构建输出(已 gitignore
├── package.json
├── tsconfig.json
├── tsdown.config.ts
├── eslint.config.ts
└── vitest.config.ts
```
## 单体仓库
```bash
cp -r ~/templates/antfu/starter-monorepo my-monorepo
cd my-monorepo && rm -rf .git && git init
pnpm install
```
### 结构
```
my-monorepo/
├── packages/
│ ├── core/
│ │ ├── src/
│ │ ├── package.json
│ │ └── tsdown.config.ts
│ └── cli/
│ ├── src/
│ └── package.json
├── playground/ # 集成测试
├── pnpm-workspace.yaml
├── package.json # 根级脚本、devDeps
├── tsconfig.json # 基础配置
└── eslint.config.ts
```
### pnpm-workspace.yaml
```yaml
packages:
- packages/*
- playground
catalogs:
build:
tsdown: ^0.15.0
unbuild: ^3.0.0
lint:
eslint: ^9.0.0
'@antfu/eslint-config': ^4.0.0
test:
vitest: ^3.0.0
types:
typescript: ^5.7.0
```
## pnpm Catalogs
按用途组织依赖项(来自 antfu 的博客文章):
| 类别 | 内容 |
| ------- | ---------------------------------- |
| build | tsdown, unbuild, rollup 插件 |
| lint | eslint, @antfu/eslint-config |
| test | vitest, @vue/test-utils |
| types | typescript, @types/\* |
| prod | 运行时依赖:consola, defu, pathe |
### 使用 Catalogs
```json
{
"devDependencies": {
"tsdown": "catalog:build",
"eslint": "catalog:lint",
"vitest": "catalog:test",
"typescript": "catalog:types"
}
}
```
## ESLint 配置
```bash
pnpm add -D eslint @antfu/eslint-config
```
```typescript
// eslint.config.ts
import antfu from '@antfu/eslint-config'
export default antfu({
type: 'lib',
pnpm: true,
formatters: true,
})
```
## Git Hooks
```bash
pnpm add -D simple-git-hooks lint-staged
```
```json
{
"simple-git-hooks": { "pre-commit": "pnpm lint-staged" },
"lint-staged": { "*": "eslint --fix" },
"scripts": { "prepare": "simple-git-hooks" }
}
```
添加后运行 `pnpm prepare`
## 脚本
```json
{
"scripts": {
"build": "tsdown",
"dev": "tsdown --watch",
"lint": "eslint .",
"lint:fix": "eslint . --fix",
"typecheck": "tsc --noEmit",
"test": "vitest",
"release": "bumpp",
"prepublishOnly": "pnpm build"
}
}
```