chore: 格式化、lint、任务编排换成 Vite+

Prettier + oxlint + 散在各包的检查脚本,收成 vite-plus(1.0.0-rc.1)一套,配置只有
根目录 vite.config.ts 一份:

- fmt(Oxfmt,替掉 Prettier):semi: false、printWidth: 80。Vite+ 下 Oxfmt 默认 100 列,
  不显式写 80 就是 267 个文件的 diff。范围和原来 Prettier 一致,只管代码 ——
  md / yml / json / toml 排掉(文档表格、compose 注释是手排的),db/meta 快照和
  unplugin 的两个 .d.ts 照旧排掉。.prettierrc.toml / .prettierignore 删除
- lint(Oxlint,vite-plus 自带同版本 1.85.0,单独的 oxlint 依赖删掉):denyWarnings。
  范围从三个 src 目录扩到全仓,多抓出 apps/web/vite.config.ts 里没人用的 loadEnv,删掉
- run.tasks:typecheck:api / typecheck:web / check:routes / check:ast 四个检查 + 汇总的
  verify(vp check + 前四个)。一律经 `bun run <脚本>` 调 —— 任务定义在根包,PATH 是根
  目录的 node_modules/.bin,直接写 tsc 拿到的是根目录的 TS 5.9 而不是 apps/api 的 TS 7,
  实测报一堆假错
- 根脚本:fmt → vp fmt,lint → vp lint,新增 check → vp check。verify 不设同名脚本
  (Vite+ 不许任务和脚本重名),用 `bunx vp run verify`
- dev 仍是 bun run --parallel:常驻进程,缓存用不上

实测:verify 首跑全过;第二遍 5/5 命中缓存、0.25 秒;往 apps/api 塞一个类型错误,
只有 typecheck:api 和 check:routes 重跑并失败、前端直接命中缓存;.vue 里塞类型错误
同样被抓到;denyWarnings 下有一条 warning 退出码就是 1。前端构建、后端单二进制编译照常。

代价:vite-plus 带 vitest、tsgolint 等约 120MB 依赖,只进 Docker builder 阶段、不进运行
镜像,CI 的 --prebuilt 部署不受影响。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
xuyueandClaude Opus 5.5 committed 2026-09-27 15:37:23 +08:00
1 parent f8b04af4ea
commit 44295188b9
8 files changed
+352 -53

No files matched your search

+21 -9
View File
@@ -52,21 +52,33 @@ bun run dev # api(3000) + worker + web(5173) 一起起
常用检查:
```bash
bunx vp run verify # 下面这些一次跑完,带缓存(没改过的直接跳过)
bun run check # 格式 + lint(vp check),不含类型检查
bun run fmt # 格式化(Oxfmt),全仓一把
bun run lint # lint(Oxlint),有一条 warning 就算失败
bun run --filter '@oj2/api' typecheck # 后端类型检查
bun run --filter '@oj2/api' check:routes # 路由遮蔽检查,加完路由跑一下
bun run --filter '@oj2/api' check:ast # AST 节点类型检查,升级 tree-sitter 后跑
cd apps/web && bun run type-check # 前端类型检查
cd apps/web && bun run build # 前端构建
bun run fmt # Prettier,全仓一把(只在根目录有)
bun run lint # oxlint,全仓一把,有一条 warning 就算失败
cd apps/web && bun run build # 前端构建(不在 verify 里)
```
**格式化是全仓一套 Prettier**,配置只有根目录的 `.prettierrc.toml`(`semi=false`,
其余全默认,printWidth 80)。`bun run fmt` 覆盖 `apps/*/src`、`packages/*/src` 和两个
构建配置;`.prettierignore` 挡掉 drizzle-kit 生成的 `src/db/meta/` 快照和 unplugin
每次 dev 都会重写的两个 `.d.ts`。后端和契约原来没进 Prettier(手写在 100 列上下),
2026-09-16 一次性全量格式化过 —— 之后**改完代码顺手跑一下 `bun run fmt`**,
别再让两边的口径分叉。
**格式化、lint、任务编排都走 Vite+**(`vite-plus`,`vp` 命令),配置只有根目录的
`vite.config.ts` 一份:`fmt` 块(Oxfmt,`semi: false`、`printWidth: 80`)、`lint` 块
(Oxlint,`denyWarnings`)、`run.tasks`(`verify` 和它依赖的四个检查)。前端自己的构建
配置在 `apps/web/vite.config.ts`,和根目录那份无关。
- **Oxfmt 在 Vite+ 下默认 100 列**,根配置显式写了 80,别删 —— 删了就是几百个文件的 diff。
- 格式化只管代码:`.md` / `.yml` / `.json` / `.toml` 在 `fmt.ignorePatterns` 里排掉了
(文档的中文表格、compose 的逐行注释是手排的),`src/db/meta/` 快照和 unplugin 的两个
`.d.ts` 也排掉了。
- **`run.tasks` 里一律经 `bun run <脚本>` 调**,不直接写 `tsc`:任务定义在根包,PATH 是根目录
的 `node_modules/.bin`,直接写拿到的是根目录的 TS 5.9 而不是 `apps/api` 的 TS 7。
- 任务名不能和根 `package.json` 的脚本重名(Vite+ 直接报错),所以 `verify` 没有对应的
`bun run` 脚本,用 `bunx vp run verify`。
- 缓存在 `node_modules/.vite/task-cache`,按读到的文件内容做指纹;怀疑缓存不对时删掉它。
- 2026-09-16 用 Prettier 全量格式化过一次,2026-09-27 换成 Oxfmt,差异只有 5 个文件
(长联合类型的换行)。之后**改完代码顺手跑一下 `bun run fmt`**。
⚠️ **前端类型检查只能走 `bun run type-check` 这个脚本。** 两条看起来等价的路子都会**静默
通过**:`vue-tsc --noEmit -p tsconfig.json` 检查 0 个文件(那个 tsconfig 是 `files: []` +