Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

@void/react: a non-island component under an _-prefixed directory in pages/ ships every page module to the browser

Abierto
#575 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
72/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
react, typescript, vite

Línea de trabajo

Read packages/react/src/plugin-pages.ts and compare its hasNonIslandPages() path handling with the scanner in scan.ts; the report says the Solid plugin has the same check. Reproduce with the provided _ui/frame.tsx example and inspect dist/client/assets after vp build. Done when files below underscore-prefixed directories are excluded from client bundles, with a regression test covering the case.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Version: void / @void/react 1.2.1 (also 1.1.12); main at a6de7829.

Repro

  1. pnpm create void (React, static output: output: 'static' in void.config.ts).
  2. pages/index.island.tsx:
    import { Frame } from './_ui/frame';
    export default function Home() { return <Frame><h1>Hello</h1></Frame>; }
    
  3. pages/_ui/frame.tsx, a shared server-only component that is not a page or an island:
    export const SECRET_COPY = 'server-only text';
    export function Frame({ children }: { children: React.ReactNode }) {
      return <main data-x={SECRET_COPY}>{children}</main>;
    }
    
  4. vp build, then ls dist/client/assets and grep -l 'server-only text' dist/client/assets/*.js.

Expected: an island-only app emits no pages-client bundle, and frame.tsx (not a route, because the route scanner skips _ segments) never reaches dist/client.

Actual: pages-client-*.js plus a chunk for every page module and every import (frame-*.js) are emitted to dist/client/assets, and the server-only strings are in them. In our app that is 18 files and 351 KB instead of 5 files and 33 KB, and 42 strings that were meant to stay server-side.

Cause: packages/react/src/plugin-pages.ts hasNonIslandPages() skips only basenames that start with _:

if (name.startsWith('_') || name.startsWith('layout.')) continue;

entry.name for pages/_ui/frame.tsx is frame.tsx. The pages scanner (scan.ts) skips any segment that starts with _ (except _layouts), so the two disagree. The Solid plugin has the same check.

Suggested fix: test every path segment relative to dir, as the scanner does:

const rel = relative(dir, join(entry.parentPath, name));
if (rel.split(sep).some((s) => s.startsWith('_')) || name.startsWith('layout.')) continue;

This is adjacent to #559, which adds the .server. exclusion to the same line.

Lenguaje dominante
TypeScript
Estrellas
580
Forks
56
Merge medio
12 h 25 min
PR fusionados (30 d)
134

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de voidzero-dev/void

Todos los issues de voidzero-dev/void

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.