@void/react: client environment has no optimizeDeps.entries for pages, causing a dev re-optimization reload on first load
Mantenedores costumam responder em até 1 dia
Avaliação
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Facilidade para iniciantes
- 66/100
- Tipo de issue
- Bug
- Clareza
- Claramente especificada
- Status de atividade
- Ativa
- Stack de tecnologia
- typescript, vite
- Domínio
- build-system, devtools
Direção de pesquisa
Start with react/src/plugin-pages.ts around lines 190–218 and 274, then trace how the dev config sets optimizeDeps for the client and worker environments. Reproduce with a cold node_modules/.vite cache and DEBUG=vite:deps vp dev; the issue includes a workaround and measurements. Done when page dependencies and void/pages-prefetch are optimized on the first load without a client reload.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Summary
In dev, @void/react gives the worker environment a pages/** scan entry but gives the client environment none. Vite's client scanner therefore finds no dependencies, discovers them while serving the first page, re-bundles, and forces a full page reload ((client) optimized dependencies changed. reloading).
- Version:
void/@void/react1.2.1 (latest).mainat 65ab6032 has the same code. packages/react/src/plugin-pages.ts#L190-L218: the client env only getsinclude: CLIENT_OPTIMIZE_DEPS(React);entries: [pagesOptimizeEntries]is set only underenvironments[WORKER_ENVIRONMENT_NAME](L214).- The worker entry was added in ba979d5c ("Fix worker crash in dev on initial load"); its comment explains the worker case only. Nothing in the docs mentions
optimizeDeps. - A second, related gap: the generated client entry imports
void/pages-prefetch(L274). It is a virtual module, so the scanner can't see that import either, andvoid/pages-prefetchis discovered late even when page entries are scanned.
Repro
- A Pages app with a few page components that import third-party UI packages (e.g.
@base-ui/react/*,@tanstack/react-query). rm -rf node_modules/.vite && DEBUG=vite:deps vp dev- Open a page in the browser.
Observed (DEBUG=vite:deps):
(client) Scan completed in 12.74ms: no dependencies found
new dependencies were found while crawling that weren't detected by the scanner
new dependencies found: void/pages-prefetch, @base-ui/react/merge-props, ..., motion/react
(client) optimized dependencies changed. reloading
Measurements (one app, headless Chromium, cold node_modules/.vite, 3 runs per row, numbers summed over the whole load including the reload)
| client config | requests | JS modules | client reload | median time to hydration |
|---|---|---|---|---|
| as shipped | 238 / 231 | 233 / 226 | yes (3/3) | 3981 / 4207 ms |
+ entries only |
239 / 233 | 234 / 228 | yes (3/3, only void/pages-prefetch late) |
4048 / 4091 ms |
+ entries + include: ['void/pages-prefetch'] |
217 / 211 | 214 / 208 | no (0/3) | 3453 / 3180 ms |
(two routes per cell)
Workaround
// vite.config.ts
export default defineConfig({
optimizeDeps: {
entries: ['pages/**/*.{js,jsx,ts,tsx}', '!pages/**/*.server.{js,jsx,ts,tsx}'],
include: ['void/pages-prefetch'],
},
// ...
});
Suggested fix
In the dev config hook of plugin-pages.ts, also pass the page entries (excluding *.server.* companions) to the client optimizeDeps.entries, and add void/pages-prefetch to the client include (it is imported only by the virtual client entry).
- Linguagem predominante
- TypeScript
- Estrelas
- 580
- Forks
- 56
- Merge médio
- 11h 28min
- PRs com merge (30d)
- 150
Preparar o ambiente
Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de voidzero-dev/void
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 48/100
voidzero-dev/void#619 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 35/100
voidzero-dev/void#606 ·
Mantenedores costumam responder em até 1 dia
-
`void/log`: add `logger.child(fields)` to bind fields to every lineTalvez já em andamento @Dazzanova assumiu hoje. Aberta
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 82/100
voidzero-dev/void#596 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 56/100
voidzero-dev/void#579 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 55/100
voidzero-dev/void#573 ·
Mantenedores costumam responder em até 1 dia
Todas as issues de voidzero-dev/void
Issues semelhantes
-
category::task code priority::normal
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
e0ipso/strikethroo#145 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 85/100
cocos/cocos-docs#3333 ·
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
RevenueCat/react-native-purchases#2079 ·
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
RevenueCat/purchases-hybrid-common#2039 ·
Mantenedores costumam responder em até 1 dia
-
agent-reported area/react bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
Mantenedores costumam responder em até 1 dia