cloudflare/vinext

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

Fechada

#1.473 aberto em 22 de mai. de 2026

 (0 comentário) (0 reação) (0 responsável)TypeScript (383 forks)github user discovery
adapter-api-e2ehelp wanted

Métricas do repositório

Stars
 (8.624 estrelas)
Métricas de merge de PR
 (Mesclagem média 1d 1h) (462 fundiu PRs em 30d)

Description

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.

Guia do colaborador