Skip to content

fix(editor): Configurar Monaco para eliminar errores "Cannot find module 'react'"#58

Open
mfagundez-4geeks wants to merge 2 commits intomasterfrom
fix/monaco-editor-ts-module-errors
Open

fix(editor): Configurar Monaco para eliminar errores "Cannot find module 'react'"#58
mfagundez-4geeks wants to merge 2 commits intomasterfrom
fix/monaco-editor-ts-module-errors

Conversation

@mfagundez-4geeks
Copy link
Copy Markdown
Contributor

@mfagundez-4geeks mfagundez-4geeks commented Mar 6, 2026

Problema

Al editar ejercicios con archivos .tsx o .ts que importan react (u otros módulos npm), el editor Monaco mostraba:

  • Subrayado rojo en import ... from 'react' con el error "Cannot find module 'react'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option? (2792)".
  • Errores en rojo en el JSX (por no poder resolver React).

El language service de TypeScript dentro de Monaco no tiene acceso a node_modules ni a un tsconfig del proyecto, así que no puede resolver módulos como react.
Son errores falsos, ya que no afectarán la evaluación del ejercicio, ya que la validación real se hace mediante Rigobot/tests (según el entorno), no mediante el editor.

Issue relacionado: Monaco Editor muestra error "Cannot find module 'react'" en ejercicios .tsx/.ts (no afecta la validación)

Opciones consideradas

Opción Qué hace Por qué se descartó/eligió
A Desactivar solo la validación semántica en Monaco Sin tocar compilerOptions, el mensaje de módulo podía seguir apareciendo en algunos casos; no cubre bien el problema de resolución.
B Solo configurar compilerOptions (moduleResolution, jsx, etc.) Sin tipos ni resolución real de react, el "Cannot find module" puede seguir saliendo. Es necesaria pero no suficiente por sí sola.
C Inyectar tipos de React con addExtraLib (declaraciones manuales o mínimas) Requiere mantener declaraciones a mano; solo cubre un subconjunto de la API de React y habría que ampliarlo según ejercicios.
D Cargar @types/react desde un CDN y pasarlos a addExtraLib Dependencia de red, más complejidad (y dependencias transitivas de los .d.ts). Menos robusto y más frágil.
B + A (elegida) Configurar compilerOptions + desactivar validación semántica (noSemanticValidation: true) No depende de red ni de mantener tipos; aplica a cualquier módulo (react, next, etc.); implementación simple y segura. La validación real es la de Rigobot/tests, no la del editor.

Por qué se eligió B + A

  • Seguridad: Solo cambia la configuración del language service de Monaco; no afecta al build ni al runtime de la app.
  • Robustez: Funciona para cualquier import de módulo npm en ejercicios (react, react-dom, next, etc.) sin inyectar tipos por cada uno.
  • Simplicidad: Un único util reutilizable (monacoTsConfig.ts) y beforeMount en Editor y Markdowner; sin dependencias nuevas.
  • Validación que cuenta: La corrección del código la hace Rigobot/tests, no el editor.

Validaciones en el editor: qué se mantiene y qué no

Validaciones que ya NO se realizan en Monaco (semántica)

  • Resolución de módulos (ej. "Cannot find module 'react'").
  • Comprobación de tipos (tipos incorrectos, props faltantes, etc.).
  • Variables o imports no usados.
  • Uso de variables no declaradas.
  • Errores de asignabilidad o de firma de funciones.
  • Cualquier otro diagnóstico que dependa del análisis de tipos del language service.

Validaciones que SÍ se mantienen (sintaxis)

  • Errores de sintaxis (paréntesis/llaves sin cerrar, puntos y coma donde aplica, etc.).
  • Detección de código mal formado que impida parsear el archivo.
  • Resaltado y estructura del código (syntax highlighting, brackets, etc.).

El autocompletado básico y la edición del código siguen funcionando con normalidad; solo se dejan de mostrar los diagnósticos semánticos (módulos, tipos).

- Add monacoTsConfig utility: setCompilerOptions (moduleResolution, jsx) and
  setDiagnosticsOptions (noSemanticValidation, keep syntax validation)
- Use beforeMount in Editor.tsx and Markdowner.tsx so React/TSX tabs no longer
  show red squiggles on 'react' imports and JSX
@mfagundez-4geeks mfagundez-4geeks changed the title fix(editor): Configurar Monaco para eliminar falsos errores "Cannot find module 'react'" fix(editor): Configurar Monaco para eliminar errores "Cannot find module 'react'" Mar 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant