La otra vez, armando un proyecto React Native desde cero, instalé un par de librerías y al lanzar el bundler, ¡paf! Error: ENOSPC: System limit for number of file watchers reached. Un clásico de Linux, de hecho. Me ha pasado en mil proyectos, con React Native, Next.js, Angular, lo que sea que use hot-reloading.
Este error, ENOSPC, significa que tu sistema operativo, a través de inotify, tiene un límite en cuántos archivos y directorios puede 'vigilar' a la vez. Cuando un bundler como Metro para React Native arranca, necesita estar atento a cada cambio en tu código para recargar la app. Si tienes muchos archivos, sobre todo con el monstruo de node_modules, ese límite se supera y la herramienta simplemente falla.
La solución que siempre me salva
No voy a dar vueltas. La solución más directa y la que casi siempre funciona es subir ese límite. Yo lo he hecho varias veces, y honestamente, me ha salvado de bugs a las 2 AM cuando el cliente quiere la demo al día siguiente. No es sobreingeniería, es ajustar una configuración base para un entorno de desarrollo moderno.
Para esto, tienes que editar el archivo de configuración del sistema /etc/sysctl.conf y aplicar los cambios. Así:
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Con ese comando, estás diciendo al sistema que ahora puede vigilar muchísimos más archivos (524288, para ser exactos). Para verificar que el cambio se aplicó bien, puedes usar:
cat /proc/sys/fs/inotify/max_user_watches
¿Ignorar node_modules o no?
Ahora, ojo que la respuesta más votada en Stack Overflow dice que aumentar el límite es 'poner el carro delante del caballo', sugiriendo que la solución real es configurar Watchman para ignorar node_modules. Y sí, es una buena práctica, y si usas Watchman directamente, deberías hacerlo en tu archivo .watchmanconfig.
Sin embargo, en mi experiencia, la mayoría de las veces el problema real es que el límite por defecto de inotify es simplemente muy bajo para los proyectos de hoy. Un proyecto React Native o Next.js moderno, con todas sus dependencias, puede tener decenas de miles de archivos. Aumentar el límite de inotify no es un parche, es una configuración necesaria para que el sistema opere bien con la carga de trabajo de desarrollo actual. No estoy diciendo que ignores la configuración de Watchman, pero una cosa no quita la otra.
Mi recomendación concreta
Entonces, ¿qué hago yo? Si te sale este error ENOSPC, lo primero es subir el límite de inotify con los comandos que te di. Es rápido, efectivo y te permite seguir trabajando. Después, si quieres optimizar más y tu proyecto usa Watchman, puedes considerar agregar node_modules a la lista de ignorados en .watchmanconfig. Pero la prioridad es que tu dev server funcione.
Me frustra cuando la gente se complica buscando 'la solución perfecta' para un problema que tiene una respuesta directa y funcional. A veces, la solución simple es la mejor.