Skip to content
2026-10-08QUALITY GATES约 12 分钟阅读

VERIFY BEFORE SHIP

Next SSR 插件链追平 ESLint 10 主线;升级决策全部带验证证据,可回溯、可复现。

  • Vite
  • React
  • Vue
  • Next.js
  • Nuxt
  • SSR
  • Spring Boot
  • ESLint 10

2026-10-08 ​

更新概览 ​

  • React SPA 模板:15 项 patch/minor 升级(Vite 8.3.3、ESLint 10.12.0、Vitest 5.0.3、orval 8.40.0、radix-ui 1.7.0 等),全部门禁通过。
  • Vue 3 SPA 模板:13 项 patch/minor 升级(Vite 8.3.3、vue-tsc 3.3.12、oxlint 1.87.0、oxfmt 0.72.0、reka-ui 2.11.0 等);升级过程暴露并修复了 postcss 8.5.28/8.5.29 双副本引发的定义文件冲突(pnpm dedupe 收敛)。
  • React SSR 模板:Next.js 16.3.6 → 16.4.0,并落地 ESLint 9 → 10.12.0——官方 release notes 确认 eslint-config-next 自 16.4 起支持 ESLint 10,本地 lint 实测通过、react 插件规则确认生效,解除了 9 月中旬以来"冻结在 ESLint 9"的兼容线。
  • Vue 3 SSR 模板:12 项 patch/minor 升级;Nuxt 4.6.0 候选被拒——其依赖 cssnano 9.3.x 家族(约 27 个包)于 2026-10-05 从 staged publish 迁移到 trusted publisher,触发 pnpm no-downgrade 信任策略且逐包级联;模板已有的 trustPolicyIgnoreAfter: 10080(7 天)意味着 2026-10-12 后拦截自动失效,届时可零白名单成本升级。
  • Spring Boot 后端模板:本次无依赖变化。Spring Boot parent 4.1.1 仍为 4.1 线最新稳定版(4.2 仅有 M1/M2 里程碑,不采纳);springdoc 3.1.1、archunit 1.5.1、spotless 3.10.3、jacoco 0.8.15 均已是 registry 最新。
  • 本次验证:四套前端 typecheck / lint / test / coverage / 组件测试守卫 / build / Playwright E2E 全部通过;后端生成项目 ./mvnw clean verify 通过(含 Testcontainers、JaCoCo "All coverage checks have been met"、ArchUnit);cwa-stack CLI 映射核对与后端生成冒烟通过。

React SPA 模板 (vite_react_init) ​

依赖版本变更 ​

依赖旧版本新版本类型影响说明
vite^8.3.1^8.3.3patch构建内核补丁
vitest / @vitest/coverage-v8 / @vitest/ui^5.0.2^5.0.3patch测试栈补丁
eslint^10.11.0^10.12.0minor代码规范
@eslint-react/eslint-plugin^5.20.8^5.24.8minorReact 专项规则
orval^8.38.0^8.40.0minorOpenAPI 契约生成
radix-ui^1.6.7^1.7.0minorUI 原语
lucide-react^1.48.0^1.52.0minor图标库
@vitejs/plugin-react^6.1.1^6.1.2patchReact 插件补丁
immer^11.1.18^11.1.21patch状态不可变更新
shadcn^4.21.0^4.21.3patchCLI 工具
jsdom^30.1.1^30.1.2patch测试环境
web-vitals^6.2.2^6.2.3patch性能指标
@types/node^24.19.0^24.19.1patchNode 24 线类型(拒绝 26.x,保持与 engines 一致)

升级内容说明 ​

全部为 patch/minor,无破坏点。保留项:TypeScript 7.0.2(大版本,Go 原生编译器,vue-tsc/插件生态未跟进)、MSW 3.0.2(大版本,留待专项迁移)、@types/node 26 线(与模板 Node 24 基线不符)。

模板影响 ​

README 技术栈同步(Vite 8.3.3、lucide-react 1.52.0、ESLint 10.12.0)。E2E 3/3 通过。

Vue 3 SPA 模板 (vite_vue3_init) ​

依赖版本变更 ​

依赖旧版本新版本类型影响说明
vite^8.3.1^8.3.3patch构建内核补丁
vitest / @vitest/coverage-v8 / @vitest/ui^5.0.2^5.0.3patch测试栈补丁
vue-tsc^3.3.11^3.3.12patch类型检查
orval^8.38.0^8.40.0minorOpenAPI 契约生成
reka-ui^2.10.5^2.11.0minorUI 原语
@lucide/vue^1.48.0^1.52.0minor图标库
oxlint^1.85.0^1.87.0minor静态检查
oxfmt^0.70.0^0.72.0minor格式化
jsdom^30.1.1^30.1.2patch测试环境
web-vitals^6.2.2^6.2.3patch性能指标
@types/node^24.19.0^24.19.1patchNode 24 线类型

升级内容说明 ​

升级后 pnpm typecheck 在 vite.config.ts 报 TS2769/TS2321。定位结论:与 vite/vue-tsc 版本无关,而是锁文件中 postcss 8.5.28 与 8.5.29 双副本并存——autoprefixer 的插件类型绑定 8.5.28,Vite 的 postcss 配置类型绑定 8.5.29,AtRuleProcessor 等同名类型互不相容。pnpm update postcss && pnpm dedupe 收敛到单副本后恢复。该问题对任何执行过 in-range 更新的 pnpm 项目都可能复现,值得留意。

模板影响 ​

README 技术栈表同步(Vite 8.3.3)。E2E 3/3 通过。

React SSR 模板 (vite_react_ssr_init) ​

依赖版本变更 ​

依赖旧版本新版本类型影响说明
next^16.3.6^16.4.0minorSSR 框架
eslint^9.39.5^10.12.0major代码规范(解除冻结)
eslint-config-next^16.3.6^16.4.0minorNext 官方 ESLint 配置
vitest / @vitest/coverage-v8 / @vitest/ui^5.0.2^5.0.3patch测试栈补丁
orval^8.38.0^8.40.0minorOpenAPI 契约生成
radix-ui^1.6.7^1.7.0minorUI 原语
lucide-react^1.48.0^1.52.0minor图标库
oxfmt^0.70.0^0.72.0minor格式化
@vitejs/plugin-react^6.1.1^6.1.2patchReact 插件补丁
shadcn^4.21.0^4.21.3patchCLI 工具
sass / jsdom / @types/node详见 lockfilepatch补丁

升级内容说明 ​

ESLint 10 落地是本次核心变化。9 月的两轮验证(2026-09-17、2026-09-28)确认 eslint-config-next@16.3.6 拉取的 eslint-plugin-react@7.37.5 在 ESLint 10 下 detectReactVersion 崩溃,因此模板冻结在 ESLint 9。本次 Next 16.4.0 release notes 明确"eslint-config-next 支持 ESLint 10";本地实测 pnpm lint 通过,并用 --print-config 确认 react/display-name、react/jsx-key 等插件规则在 ESLint 10 下真实加载(eslint-plugin-react 7.37.5 仍在依赖树中)。AGENTS.md 的 ESLint 条款已改写为"使用 ESLint 10 + 复现崩溃时的降级回退指引"。

Next 16.4 行为变化提示:严格路由匹配默认开启、Turbopack 生产构建默认开启导出名混淆、Pages Router 弃用 React 18。模板使用 App Router 且 E2E 覆盖生产构建 + 服务端启动 + 首屏 + hydration,4/4 通过,未受影响。

模板影响 ​

README 技术栈同步(Next.js 16.4.0、ESLint 10.12.0、oxfmt 0.72.0;顺带修正陈旧的 Zustand 5.0.14 → 实际 5.0.15)。AGENTS.md Lint 约定重写。E2E 4/4 通过。

Vue 3 SSR 模板 (vite_vue3_ssr_init) ​

依赖版本变更 ​

依赖旧版本新版本类型影响说明
vitest / @vitest/coverage-v8 / @vitest/ui^5.0.2^5.0.3patch测试栈补丁
vue-tsc^3.3.11^3.3.12patch类型检查
orval^8.38.0^8.40.0minorOpenAPI 契约生成
reka-ui^2.10.5^2.11.0minorUI 原语
@lucide/vue^1.48.0^1.52.0minor图标库
oxlint^1.85.0^1.87.0minor静态检查
oxfmt^0.70.0^0.72.0minor格式化
@typescript-eslint/parser^8.70.1^8.71.1minorESLint 解析器
eslint^10.11.0^10.12.0minor代码规范
@nuxt/test-utils^4.3.2^4.3.3patch测试工具
@tanstack/vue-table^9.2.4^9.2.6patch表格
sass / jsdom / @types/node详见 lockfilepatch补丁

升级内容说明 ​

Nuxt 4.6.0 候选被拒(保留 4.5.2):安装被 pnpm ERR_PNPM_TRUST_DOWNGRADE 拦截。根因是其构建链 @nuxt/vite-builder@4.6.0 → cssnano@9.3.2 起,cssnano 全家族(cssnano、cssnano-preset-default、cssnano-utils 及约 24 个 postcss-* 子插件)于 2026-10-05 从 staged publish 迁移到 trusted publisher,pnpm 视为"信任降级"。核实过 npm 元数据:维护者名单未变(cssnano 官方团队)、发布节奏正常,属发布方式迁移而非接管事件;但受影响包约 27 个,为此在模板固化大面积 trustPolicyExclude 白名单不可取。模板 pnpm-workspace.yaml 已配置 trustPolicyIgnoreAfter: 10080(7 天),2026-10-12 后拦截自动失效,届时直接 pnpm update nuxt 即可,无需任何白名单。

h3 保留 1.x:Nuxt 4.6 官方说明仍基于 Nitro v2/h3 v1,nuxt/server 导入是为 h3 v2(Nuxt 5)铺路的可选前瞻方式;模板显式声明 h3: ^1.15.11 维持不变。

模板影响 ​

README 技术栈同步(@lucide/vue 1.52.0、Oxlint 1.87.0、ESLint 10.12.0、oxfmt 0.72.0;Nuxt 版本行保持 4.5.2)。E2E 4/4 通过。

Spring Boot 后端模板 (springboot-template) ​

本次无依赖变化。

  • Spring Boot parent 4.1.1 已是 4.1 线最新稳定版;4.2.0-M1/M2 为里程碑版,按模板基线策略不采纳。
  • springdoc-openapi 3.1.1、archunit-junit5 1.5.1、spotless 3.10.3、jacoco 0.8.15 均为 Maven Central 最新,无需改动。
  • Dockerfile(eclipse-temurin:25)、compose.yml(mysql:8.4 / redis:8-alpine)、CI(temurin 25)、Maven Wrapper(3.9.16)均无需变动。

验证 ​

scripts/generate.sh 生成 verify-run 项目(102 个文件占位符替换,无残留),./mvnw clean verify BUILD SUCCESS:98 个单元测试 + Testcontainers(真实 MySQL/Redis)集成测试 + JaCoCo 覆盖率门禁(输出 "All coverage checks have been met")+ ArchUnit 架构测试全部通过。

文档与锁文件 ​

  • 四套前端 pnpm-lock.yaml 随 package.json 同步更新,安装无 peer/engine 警告、无 deprecated 包。
  • React SSR:README 技术栈、AGENTS.md Lint 约定更新。
  • React SPA / Vue SPA / Vue SSR:README 技术栈版本同步。
  • Spring Boot:README/AGENTS/docs 无需变化。
  • cwa-stack(CLI):catalog.json 五个模板映射、lib/catalog.js 交互分组与标识核对一致,node bin/cwa-stack.js --version / list 正常;模板依赖升级不触及 CLI 版本与发布。

验证结果 ​

模板typechecklinttestcoverage组件守卫buildE2E
React SPA✅✅43/43✅19 组件 ✅✅3/3 ✅
Vue 3 SPA✅✅32/32✅19 组件 ✅✅3/3 ✅
React SSR✅✅(ESLint 10)29/29✅13 组件 ✅✅(Next 16.4)4/4 ✅
Vue 3 SSR✅✅25/25✅27 组件 ✅✅4/4 ✅
Spring Boot—Spotless ✅98 单元 + Testcontainers 集成✅ All coverage checks metArchUnit ✅✅—

覆盖率阈值未做任何下调。

注意事项 ​

  • postcss 双副本教训:in-range 升级后如遇类型冲突报 Two different types with this name exist,先查 .pnpm 是否存在多副本,pnpm dedupe 优先于降级包版本。
  • 2026-10-12 待办:cssnano 家族 7 天信任窗口过后,升级 Nuxt 至 4.6.0(pnpm update nuxt + 全套门禁)。

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