@uiw/codemirror-theme-* crashes vitest workers when --coverage is enabled

Abierto Apto para principiantes
#765 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
68/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Tranquilo
Stack tecnológico
typescript

Línea de trabajo

Comienza en pnpm-workspace.yaml e inspecciona los paquetes @uiw/codemirror-theme-* implicados en la ejecución de coverage que falla. Reproduce el problema con el comando de Vitest del repositorio y --coverage, y después añade las entradas de packageExtensions necesarias para los themes afectados. El trabajo estará terminado cuando coverage finalice sin errores de resolución de paquetes y los archivos de prueba no relacionados dejen de fallar.

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

Descripción

Problem

Tests pass without --coverage but fail when coverage is enabled, with errors like:

  Error: Cannot find package '@lezer/highlight' imported from                                                                                                           
    .../node_modules/.pnpm/@uiw+codemirror-theme-github@.../node_modules/@uiw/codemirror-theme-github/...

Unrelated test files also fail because vitest runs multiple test files per worker — one package load failure crashes the whole worker.

Root Cause

@uiw/codemirror-theme-* packages import @lezer/highlight internally but don't declare it as a dependency in their package.json. This is a bug in those upstream
packages.

Why it only fails with --coverage:

  • Without --coverage: Vite bundles the theme packages through its own resolver, which searches broadly across the workspace and finds @lezer/highlight in
    packages/app/node_modules. No error.
  • With --coverage: vitest's v8 coverage provider loads node_modules packages via Node's native ESM loader for instrumentation, bypassing Vite's resolver
    entirely. Node follows pnpm's strict isolation rules — a package can only resolve its declared dependencies — so @lezer/highlight is not found.

Why npm/yarn users don't hit this: Both use a flat node_modules layout where any package can access anything installed. pnpm's virtual store enforces
declared-dependency isolation.

Workaround

Add packageExtensions entries in pnpm-workspace.yaml for each affected theme package, declaring @lezer/highlight as a dependency:

packageExtensions:
  "@uiw/codemirror-theme-github@*":
    dependencies:                                                                                                                                                     
      "@lezer/highlight": "*"
  "@uiw/codemirror-theme-vscode@*":                                                                                                                                   
    dependencies:
      "@lezer/highlight": "*"
  # ... other @uiw/codemirror-theme-* packages
                                                                                                                                                                      
pnpm then symlinks @lezer/highlight into each theme package's virtual store node_modules, making it available regardless of loader — Vite, Node, or the v8 coverage
provider.                                                                                                                                                             
Lenguaje dominante
TypeScript
Estrellas
2.3k
Forks
161
Métricas de merge de PR
Sin PR fusionados en 30 d

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

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 uiwjs/react-codemirror

Todos los issues de uiwjs/react-codemirror

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.