cloudflare/vinext

Pages Router: `next/head` manager re-executes inline scripts on re-render

Chiusa

#1473 aperta il 22 mag 2026

 (0 commenti) (0 reazioni) (0 assegnatari)TypeScript (383 fork)github user discovery
adapter-api-e2ehelp wanted

Metriche repository

Star
 (8624 stelle)
Metriche merge PR
 (Merge medio 1g 1h) (462 PR mergiate in 30 g)

Descrizione

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-22).

Problem

When the Pages Router head manager updates <Script> tags during component re-renders, Next.js dedupes by src and does not re-execute already-loaded scripts. vinext re-executes them, causing the test's side-effect array to grow beyond ["src-1.js"]. The same issue applies whether or not a CSP nonce is set.

After re-render, scripts re-executed: side-effect array exceeds expected length

Estimated Impact

~2 test failures across the deploy suite.

Affected Test Suites

  • test/e2e/nonce-head-manager/index.test.ts (2 failures)

Recommendation

  1. Reproduce first in vinext's own test suite. Add a Pages Router page that toggles state and re-renders a <Script src="./once.js">. Assert the script executes exactly once.

  2. Track loaded <Script> sources in the head manager. Maintain a Set<src> of already-injected scripts and skip re-injection during head reconciliation.

  3. Cover the nonce variant. Same dedup must apply when scripts carry a CSP nonce.

Guida contributor