2026-09-12
更新概览
- React SPA 模板:React 19.3.0、Vite 8.3.0、Vitest 5.0.0(major)及 ESLint、ahooks、lucide-react、shadcn、Playwright 等工具链同步升级。
- Vue 3 SPA 模板:Vite 8.3.0、Vitest 5.0.0(major)、Vue Router 5.3.1、Oxc 工具链与 Playwright、lint-staged 同步升级。
- React SSR 模板:React 19.3.0、Vitest 5.0.0(major);评估 ESLint 10 后按兼容性证据回退保留 ESLint 9.39.5,并在文档中固化判定依据。
- Vue 3 SSR 模板:Vitest 5.0.0(major)、@nuxt/test-utils 4.3.2、ESLint 10.10.0、Oxc 工具链与 sass、lint-staged 同步升级。
- 四模板新增
src/test/vitest-matchers.d.ts:修复 Vitest 5 移除全局 jest.Matchers 类型桥接后 jest-axe 断言失型的问题。 - TypeScript 全线保留 6.0.3:npm latest 已是 7.0.2(Go 原生编译器 major),
vue-tsc与nuxt typecheck依赖 TS JS API,兼容性未确立,本次不采纳。 - 本次验证:四套模板均通过安装(无 peer/engine/deprecated 警告)、类型检查、lint、单测、覆盖率、组件守卫、生产构建和 Playwright E2E;E2E 前需为 Playwright 1.63.0 重新下载 Chromium 构建产物。
React SPA 模板 (vite_react_init)
依赖版本变更
| 依赖或工具 | 旧版本 | 新版本 | 类型 | 影响说明 |
|---|---|---|---|---|
| React / React DOM | 19.2.8 | 19.3.0 | minor | 官方 release notes 无破坏性变更(新增 View Transitions、Fragment Refs、browser API);40 项单测与 E2E 通过。 |
| Vite | 8.2.2 | 8.3.0 | minor | 官方 release 为性能与修复版本,无破坏性变更;构建与 E2E 通过。 |
| Vitest / @vitest/ui / @vitest/coverage-v8 | 4.1.11 | 5.0.0 | major | Node ≥22.12、Vite ≥6.4 要求满足;15 个测试文件、覆盖率阈值全部通过。 |
| @vitejs/devtools / devtools-kit | 0.5.2 | 0.7.3 | minor(0.x) | peer 均为 optional,且与 Vite 8.3.0 内部 devframes 依赖(0.9.18)版本对齐。 |
| ESLint | 10.9.1 | 10.10.0 | minor | 与 @antfu/eslint-config 9.5.1(peer ^9.10 || ^10)组合通过 lint。 |
| @antfu/eslint-config | 9.5.0 | 9.5.1 | patch | lint 通过。 |
| @eslint-react/eslint-plugin | 5.18.7 | 5.19.0 | minor | lint 通过。 |
| eslint-plugin-react-refresh | 0.5.5 | 0.5.6 | patch | lint 通过。 |
| ahooks | 3.9.7 | 3.10.0 | minor | peer 范围覆盖 React 19;现有 Hooks 调用通过。 |
| lucide-react / shadcn | 1.39.0 / 4.19.1 | 1.45.0 / 4.21.0 | minor | 组件与无障碍测试通过。 |
| @playwright/test | 1.62.1 | 1.63.0 | minor | 需重新下载 chromium headless shell 1243;E2E 3 项通过。 |
| lint-staged | 17.4.1 | 17.5.1 | minor | Node 24.18.0 满足 engine 要求。 |
| @types/react / @types/react-dom | 19.2.18 / 19.2.5 | 19.3.0 / 19.3.0 | minor | 类型检查通过。 |
| @types/node | 24.13.3 | 24.13.4 | patch | 类型检查通过。 |
| autoprefixer / less | 10.5.4 / 4.9.0 | 10.5.6 / 4.9.1 | patch | 构建(含 Less 样式)通过。 |
| postcss(锁文件内统一) | 8.5.26 | 8.5.28 | toolchain | Vite 8.3.0 将 postcss 底线提升至 8.5.28,更新锁文件消除双版本类型分裂。 |
升级内容说明
- Vitest 5 的两个行为变更在本地验证中未造成失败:默认在每个测试前清理 mock(模板 setup 已显式管理 mock 生命周期)、
toHaveTextContent严格化(a11y 与组件测试未依赖宽松匹配)。junit 输出因脚本显式传参--outputFile,不受.vitest/新默认值影响。 - TypeScript 7.0.2 未采纳:TS 7 是 Go 原生编译器 major,
vue-tsc/nuxt typecheck生态依赖 TS JS API;四模板统一保留 6.0.3(6.x 最新)。 - 安装过程无 peer、engine 与 deprecated 警告。
模板影响
- 认证、路由、性能监控、组件行为和环境变量开关保持不变。
- README 与 AGENTS 已同步 Vite 8.3.0、React 19.3.0、ESLint 10.10.0 基线;锁文件随 pnpm 更新同步。
Vue 3 SPA 模板 (vite_vue3_init)
依赖版本变更
| 依赖或工具 | 旧版本 | 新版本 | 类型 | 影响说明 |
|---|---|---|---|---|
| Vite | 8.2.2 | 8.3.0 | minor | 无破坏性变更;vue-tsc 类型检查与构建通过。 |
| Vitest / @vitest/ui / @vitest/coverage-v8 | 4.1.11 | 5.0.0 | major | 14 个测试文件、29 项测试与覆盖率阈值通过。 |
| Vue Router | 5.3.0 | 5.3.1 | patch | 路由聚合与登录回跳 E2E 通过。 |
| @lucide/vue | 1.39.0 | 1.45.0 | minor | 组件与无障碍测试通过。 |
| Oxlint / oxfmt | 1.81.0 / 0.66.0 | 1.82.0 / 0.67.0 | minor | lint 与格式检查通过。 |
| @playwright/test | 1.62.1 | 1.63.0 | minor | 浏览器产物更新后 E2E 3 项通过。 |
| lint-staged | 17.4.1 | 17.5.1 | minor | 提交工具链验证通过。 |
| @types/node | 24.13.3 | 24.13.4 | patch | 类型检查通过。 |
| @vitejs/devtools / devtools-kit | 0.5.2 | 0.7.3 | minor(0.x) | 与 Vite 8.3.0 内部依赖对齐,peer 均为 optional。 |
| postcss(锁文件内统一) | 8.5.26 | 8.5.28 | toolchain | 消除 Vite 8.3.0 与 autoprefixer 之间的 postcss 双版本类型冲突(修复 typecheck 失败的根因)。 |
升级内容说明
- 升级 Vite 8.3.0 后
vue-tsc在vite.config.ts报出 postcssAtRule_/ChildNode类型冲突与Plugin & ExportedAPI栈深错误,根因是锁文件中 autoprefixer 仍绑定 postcss 8.5.26、而 Vite 8.3.0 要求^8.5.28,两份 postcss 类型互斥;pnpm update postcss统一后 typecheck 恢复通过,未改动任何模板代码。 - TypeScript 7.0.2 未采纳,理由同 React SPA 模板。
模板影响
- 路由、Pinia 持久化、客户端渲染和 shadcn-vue 组件边界保持不变。
- README 与 AGENTS 已同步 Vite 8.3.0 基线;锁文件随 pnpm 更新同步。
React SSR 模板 (vite_react_ssr_init)
依赖版本变更
| 依赖或工具 | 旧版本 | 新版本 | 类型 | 影响说明 |
|---|---|---|---|---|
| React / React DOM | 19.2.8 | 19.3.0 | minor | Server Component 边界与 hydration 基线通过 E2E 验证;官方 notes 无破坏性变更,Trusted Types 集成与独立 transitions 为行为性注意点。 |
| Vitest / @vitest/ui / @vitest/coverage-v8 | 4.1.11 | 5.0.0 | major | 11 个测试文件、17 项测试与覆盖率阈值通过。 |
| lucide-react / shadcn | 1.39.0 / 4.19.1 | 1.45.0 / 4.21.0 | minor | 组件测试与生产构建通过。 |
| sass | 1.103.1 | 1.104.0 | minor | 样式构建通过。 |
| oxfmt | 0.66.0 | 0.67.0 | minor | 格式检查通过。 |
| @playwright/test | 1.62.1 | 1.63.0 | minor | 生产 SSR preview 与登录 smoke E2E 3 项通过。 |
| lint-staged | 17.4.1 | 17.5.1 | minor | 提交工具链验证通过。 |
| @types/react / @types/react-dom | 19.2.18 / 19.2.5 | 19.3.0 / 19.3.0 | minor | 类型检查通过。 |
| @types/node | 24.13.3 | 24.13.4 | patch | 类型检查通过。 |
| ESLint(候选) | 9.39.5 | 回退保留 9.39.5 | 兼容性拒绝 | eslint-config-next@16.3.4 虽声明 eslint >=9.0.0,但其依赖 eslint-plugin-react@7.37.5 peer 只到 ^9.7 且在 ESLint 10 下 detectReactVersion 运行时崩溃;lint 实测失败后回退。 |
| 新增 src/test/vitest-matchers.d.ts | — | 新增 | 代码 | Vitest 5 移除全局 jest.Matchers 桥接,jest-axe 断言类型改挂在 vitest 的 Matchers 扩展点;typecheck 恢复通过。 |
升级内容说明
- ESLint 10 升级先按
eslint-config-next的宽松 peer 范围执行,lint 门禁暴露eslint-plugin-react在 ESLint 10 下的运行时崩溃,遂回退至 9.39.5。AGENTS 中的“保留 ESLint 9”条款已补上本次验证的具体证据(插件名、版本、崩溃点),后续升级先核对eslint-plugin-react是否发布支持 ESLint 10 的版本。 - ESLint 9.39.5 为维护线,npm 已带“不再支持”弃用说明;该组合仍可正常工作,但属于已知技术债,待 Next 插件链更新后升级。
- Vitest 5 类型迁移说明:两个 SSR 模板的 a11y 测试写法为
expect(await axe(container)).toHaveNoViolations(),直接命中 Assertion 类型,因此需要显式类型桥接;SPA 模板的.resolves链式写法不受影响。
模板影响
- Next.js 16.3.4、Server Component 默认、
src/server特权请求边界与 hydration 基线均未改变;生产构建(静态预渲染 + SSR)与 E2E 通过。 - README 技术栈行同步 React 19.3.0、oxfmt 0.67.0,并标注 ESLint 9 保留原因;AGENTS 的 ESLint 条款更新为可追溯的判定依据。
Vue 3 SSR 模板 (vite_vue3_ssr_init)
依赖版本变更
| 依赖或工具 | 旧版本 | 新版本 | 类型 | 影响说明 |
|---|---|---|---|---|
| Vitest / @vitest/ui / @vitest/coverage-v8 | 4.1.11 | 5.0.0 | major | 8 个测试文件、13 项测试与覆盖率阈值通过。 |
| @nuxt/test-utils | 4.2.0 | 4.3.2 | minor | peer 显式支持 Vitest ^4.0.2 || ^5.0.0,nuxt prepare && vitest run 链路通过。 |
| ESLint | 10.9.1 | 10.10.0 | minor | 与 Oxlint、eslint-plugin-tailwindcss(peer ^9 || ^10)组合通过 lint。 |
| @lucide/vue | 1.39.0 | 1.45.0 | minor | 组件测试通过。 |
| @typescript-eslint/parser | 8.69.0 | 8.70.0 | minor | Nuxt 类型检查通过。 |
| sass | 1.103.1 | 1.104.0 | minor | 样式构建通过。 |
| Oxlint / oxfmt | 1.81.0 / 0.66.0 | 1.82.0 / 0.67.0 | minor | lint 与格式检查通过。 |
| @playwright/test | 1.62.1 | 1.63.0 | minor | 生产 SSR preview 与登录 smoke E2E 3 项通过。 |
| lint-staged | 17.4.1 | 17.5.1 | minor | 提交工具链验证通过。 |
| @types/node | 24.13.3 | 24.13.4 | patch | 类型检查通过。 |
| 新增 src/test/vitest-matchers.d.ts | — | 新增 | 代码 | 与 React SSR 模板同因:修复 Vitest 5 下 jest-axe 断言失型。 |
升级内容说明
- Nuxt 4.5.2、Pinia 4.0.3、
@pinia/nuxt1.0.2 均为 npm 当前最新,本次无版本变化;Nitro 构建产物与 hydration 基线通过 E2E 验证。 - TypeScript 7.0.2 未采纳,理由同前:
nuxt typecheck(vue-tsc)依赖 TS JS API。
模板影响
.client插件、onMounted与import.meta.client保护的 SSR/客户端边界未改变;src/server特权请求边界保持。- README 技术栈行同步 Oxlint 1.82.0、ESLint 10.10.0、oxfmt 0.67.0 与 @lucide/vue 1.45.0。
文档与锁文件
- 四模板
pnpm-lock.yaml随 pnpm 更新同步,无手工修改;升级后安装均无 peer、engine、deprecated 警告。 - React SPA 与 Vue 3 SPA 通过
pnpm update postcss将锁文件内 postcss 统一至 8.5.28(Vite 8.3.0 底线),属工具链对齐而非功能升级。 - README:四模板技术栈行按实际版本同步;React SSR 额外标注 ESLint 9 保留原因。
- AGENTS:React SPA 与 Vue 3 SPA 的依赖基线行更新;React SSR 的 ESLint 条款补充验证证据;Vue 3 SSR 无依赖基线行,未改动。
- cwa-docs 长期文档同步:
core/React模板.md、core/Vue3模板.md的 Vite/React 版本引用,core/ReactSSR模板.md的 React 版本引用。
验证结果
- 四模板统一执行并全部通过:
pnpm install(零警告)、pnpm typecheck、pnpm lint、pnpm test(React SPA 40 项 / Vue SPA 29 项 / React SSR 17 项 / Vue SSR 13 项,全部通过)、pnpm test:coverage(退出码 0,阈值未下调)、pnpm test:component-coverage(19 / 19 / 13 / 27 个组件)、pnpm build(React SPA、Vue SPA 产物构建;Next 静态预渲染 + SSR;Nuxt Nitro 产物)、pnpm test:e2e(各 3 项 smoke,含生产 SSR preview 与登录流程)。 - Playwright 1.62.1 → 1.63.0 需要重新下载 Chromium headless shell(build 1243,153.0.8010.12);未安装时 E2E 会以“Executable doesn't exist”失败,属预期维护步骤。
- 运维提示:两套 SPA 的 Playwright webServer 都固定使用 127.0.0.1:4173,请勿并行执行不同模板的
pnpm test:e2e,串行执行以避免端口互踩。
注意事项
- TypeScript 7(Go 原生编译器)是后续升级的主要候选:待
vue-tsc与nuxt typecheck官方声明兼容后,再作为独立工具链迁移任务执行,不随常规依赖升级推进。 - React SSR 的 ESLint 9 为已知技术债:升级前置条件是
eslint-plugin-react(当前 7.37.5,peer^3…^9.7)发布支持 ESLint 10 的版本,或eslint-config-next移除该依赖。 - Vitest 5 默认在每个测试前清理 mock、
toHaveTextContent改为严格匹配:当前模板测试不受影响,但新写测试时需注意这两处语义变化。 - React 19.3 的 Trusted Types 集成为默认行为、transitions 不再相互纠缠:当前模板未触发兼容问题,涉及安全策略或复杂 transitions 的业务代码需自行评估。
- 本次未修改
create-wl-app(template.json 四个映射与交互标识不变,CLI 只读验证通过);未执行任何提交、推送或发布。
