cloudflare/vinext

Build failure: `server-only` incorrectly blocked in middleware (SSR environment)

已关闭

#1,344 创建于 2026年5月20日

 (1 条评论) (0 个反应) (0 位负责人)TypeScript (383 个派生)github user discovery
adapter-api-e2ehelp wanted

仓库指标

星标
 (8,624 个星标)
PR 合并指标
 (平均合并 1天 1小时) (30 天内合并 462 个 PR)

描述

This issue was created by an agent analysing CI failures from the Next.js Deploy Suite (vinext main vs Next.js v16.2.6, 2026-05-20).

Problem

Middleware runs server-side and should be allowed to import server-only. However, vinext bundles middleware into the SSR environment, and the @vitejs/plugin-rsc rsc:validate-imports plugin flags server-only as invalid in non-RSC environments.

[plugin rsc:validate-imports] middleware.js
Error: 'server-only' cannot be imported in client build ('ssr' environment):
 imported by middleware.js
   imported by virtual:vinext-server-entry

1 build failure cascades to 13 test failures because the entire test app fails to build.

Estimated Impact

~13 test failures (from 1 build failure).

Affected Test Suites

  • test/e2e/module-layer/module-layer.test.ts (13 failures)

Recommendation

  1. Reproduce first in vinext's own test suite. Add a test with a middleware file that imports server-only and verify the build succeeds. Confirm it currently fails.

  2. Exclude middleware from the server-only validation. Either configure the RSC plugin to allow server-only in the SSR environment when imported by middleware, or move middleware to a server-appropriate build environment.

  3. Study how Next.js handles middleware module layers. In Next.js, middleware is treated as a server context where server-only is permitted. Search .nextjs-ref/packages/next/src/build/ for how middleware is layered.

贡献者指南