Skip to content
2026-09-12QUALITY GATES约 16 分钟阅读

VERIFY BEFORE SHIP

变更被更稳定的自动化验证覆盖,模板升级的回归风险随之降低。

  • Vite
  • Oxc
  • React
  • Vue
  • Pinia
  • Next.js
  • Nuxt
  • SSR

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 DOM19.2.819.3.0minor官方 release notes 无破坏性变更(新增 View Transitions、Fragment Refs、browser API);40 项单测与 E2E 通过。
Vite8.2.28.3.0minor官方 release 为性能与修复版本,无破坏性变更;构建与 E2E 通过。
Vitest / @vitest/ui / @vitest/coverage-v84.1.115.0.0majorNode ≥22.12、Vite ≥6.4 要求满足;15 个测试文件、覆盖率阈值全部通过。
@vitejs/devtools / devtools-kit0.5.20.7.3minor(0.x)peer 均为 optional,且与 Vite 8.3.0 内部 devframes 依赖(0.9.18)版本对齐。
ESLint10.9.110.10.0minor与 @antfu/eslint-config 9.5.1(peer ^9.10 || ^10)组合通过 lint。
@antfu/eslint-config9.5.09.5.1patchlint 通过。
@eslint-react/eslint-plugin5.18.75.19.0minorlint 通过。
eslint-plugin-react-refresh0.5.50.5.6patchlint 通过。
ahooks3.9.73.10.0minorpeer 范围覆盖 React 19;现有 Hooks 调用通过。
lucide-react / shadcn1.39.0 / 4.19.11.45.0 / 4.21.0minor组件与无障碍测试通过。
@playwright/test1.62.11.63.0minor需重新下载 chromium headless shell 1243;E2E 3 项通过。
lint-staged17.4.117.5.1minorNode 24.18.0 满足 engine 要求。
@types/react / @types/react-dom19.2.18 / 19.2.519.3.0 / 19.3.0minor类型检查通过。
@types/node24.13.324.13.4patch类型检查通过。
autoprefixer / less10.5.4 / 4.9.010.5.6 / 4.9.1patch构建(含 Less 样式)通过。
postcss(锁文件内统一)8.5.268.5.28toolchainVite 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) ​

依赖版本变更 ​

依赖或工具旧版本新版本类型影响说明
Vite8.2.28.3.0minor无破坏性变更;vue-tsc 类型检查与构建通过。
Vitest / @vitest/ui / @vitest/coverage-v84.1.115.0.0major14 个测试文件、29 项测试与覆盖率阈值通过。
Vue Router5.3.05.3.1patch路由聚合与登录回跳 E2E 通过。
@lucide/vue1.39.01.45.0minor组件与无障碍测试通过。
Oxlint / oxfmt1.81.0 / 0.66.01.82.0 / 0.67.0minorlint 与格式检查通过。
@playwright/test1.62.11.63.0minor浏览器产物更新后 E2E 3 项通过。
lint-staged17.4.117.5.1minor提交工具链验证通过。
@types/node24.13.324.13.4patch类型检查通过。
@vitejs/devtools / devtools-kit0.5.20.7.3minor(0.x)与 Vite 8.3.0 内部依赖对齐,peer 均为 optional。
postcss(锁文件内统一)8.5.268.5.28toolchain消除 Vite 8.3.0 与 autoprefixer 之间的 postcss 双版本类型冲突(修复 typecheck 失败的根因)。

升级内容说明 ​

  • 升级 Vite 8.3.0 后 vue-tsc 在 vite.config.ts 报出 postcss AtRule_/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 DOM19.2.819.3.0minorServer Component 边界与 hydration 基线通过 E2E 验证;官方 notes 无破坏性变更,Trusted Types 集成与独立 transitions 为行为性注意点。
Vitest / @vitest/ui / @vitest/coverage-v84.1.115.0.0major11 个测试文件、17 项测试与覆盖率阈值通过。
lucide-react / shadcn1.39.0 / 4.19.11.45.0 / 4.21.0minor组件测试与生产构建通过。
sass1.103.11.104.0minor样式构建通过。
oxfmt0.66.00.67.0minor格式检查通过。
@playwright/test1.62.11.63.0minor生产 SSR preview 与登录 smoke E2E 3 项通过。
lint-staged17.4.117.5.1minor提交工具链验证通过。
@types/react / @types/react-dom19.2.18 / 19.2.519.3.0 / 19.3.0minor类型检查通过。
@types/node24.13.324.13.4patch类型检查通过。
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-v84.1.115.0.0major8 个测试文件、13 项测试与覆盖率阈值通过。
@nuxt/test-utils4.2.04.3.2minorpeer 显式支持 Vitest ^4.0.2 || ^5.0.0,nuxt prepare && vitest run 链路通过。
ESLint10.9.110.10.0minor与 Oxlint、eslint-plugin-tailwindcss(peer ^9 || ^10)组合通过 lint。
@lucide/vue1.39.01.45.0minor组件测试通过。
@typescript-eslint/parser8.69.08.70.0minorNuxt 类型检查通过。
sass1.103.11.104.0minor样式构建通过。
Oxlint / oxfmt1.81.0 / 0.66.01.82.0 / 0.67.0minorlint 与格式检查通过。
@playwright/test1.62.11.63.0minor生产 SSR preview 与登录 smoke E2E 3 项通过。
lint-staged17.4.117.5.1minor提交工具链验证通过。
@types/node24.13.324.13.4patch类型检查通过。
新增 src/test/vitest-matchers.d.ts—新增代码与 React SSR 模板同因:修复 Vitest 5 下 jest-axe 断言失型。

升级内容说明 ​

  • Nuxt 4.5.2、Pinia 4.0.3、@pinia/nuxt 1.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 只读验证通过);未执行任何提交、推送或发布。

cwa-stack —— 开箱即用,极速响应,让开发更简单、更高效