Error nativo de React: ENOSPC: se alcanzó el límite del sistema para la cantidad de observadores de archivos
He configurado una nueva aplicación nativa de reacción en blanco.
Después de instalar algunos módulos de nodo, recibí este error.
Running application on PGN518.
internal/fs/watchers.js:173
throw error;
^
Error: ENOSPC: System limit for number of file watchers reached, watch '/home/badis/Desktop/react-native/albums/node_modules/.staging'
at FSWatcher.start (internal/fs/watchers.js:165:26)
at Object.watch (fs.js:1253:11)
at NodeWatcher.watchdir (/home/badis/Desktop/react-native/albums/node modules/sane/src/node watcher. js:175:20)
at NodeWatcher.<anonymous> (/home/badis/Desktop/react-native/albums/node modules/sane/src/node watcher. js:310:16)
at /home/badis/Desktop/react-native/albums/node modules/graceful-fs/polyfills.js:285:20
at FSReqWrap.oncomplete (fs.js:154:5)
Sé que está relacionado con la falta de espacio suficiente para que Watchman observe todos los cambios de archivos.
Quiero saber cuál es el mejor curso de acción a seguir aquí.
¿ Debo ignorar node_modules
la carpeta agregándola .watchmanconfig
?
Linux usa el paquete inotify para observar eventos del sistema de archivos, archivos individuales o directorios.
Dado que React/Angular recarga y recompila archivos en caliente al guardarlos, necesita realizar un seguimiento de todos los archivos del proyecto. Aumentar el límite de vigilancia de inotify debería ocultar los mensajes de advertencia.
Podrías intentar editar
# insert the new value into the system config
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
# check that the new value was applied
cat /proc/sys/fs/inotify/max_user_watches
# config variable name (not runnable)
fs.inotify.max_user_watches=524288
Problema real
Sin embargo, añadir más guardias es poner el carro delante del caballo. Para obtener más información sobre la solución real, lea esta respuesta: https://stackoverflow.com/a/77578694/6513173
El error se produce porque la cantidad de archivos monitoreados por el sistema ha alcanzado el límite.
Resultado: ¡ El comando ejecutado falló! O se muestra una advertencia (como ejecutar un VSCode de inicio nativo de reacción)
Solución:
Modifique la cantidad de archivos de monitoreo del sistema:
Ubuntu:
sudo gedit /etc/sysctl.conf
Agregue una línea en la parte inferior:
fs.inotify.max_user_watches=524288
¡Luego guarda y sal! Correr:
sudo sysctl -p
para comprobarlo.
Puedes solucionarlo aumentando la cantidad de observadores de inotify.
Si no estás interesado en los detalles técnicos y solo quieres que Listen funcione:
Si está ejecutando Debian, RedHat u otra distribución de Linux similar, ejecute lo siguiente en una terminal:
$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
Si está ejecutando ArchLinux, ejecute el siguiente comando en su lugar
$ echo fs.inotify.max_user_watches=524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system
Luego pégalo en tu terminal y presiona Enter para ejecutarlo.
Los detalles técnicos
Listen utiliza inotify de forma predeterminada en Linux para monitorear los directorios en busca de cambios. No es raro encontrar un límite del sistema en la cantidad de archivos que puede monitorear. Por ejemplo, el límite de notificación de Ubuntu Lucid (64 bits) está establecido en 8192.
Puede obtener su límite actual de visualización de archivos de inotify ejecutando:
$ cat /proc/sys/fs/inotify/max_user_watches
Cuando este límite no es suficiente para monitorear todos los archivos dentro de un directorio, se debe aumentar el límite para que Listen funcione correctamente.
Puedes establecer un nuevo límite temporal con:
$ sudo sysctl fs.inotify.max_user_watches=524288
$ sudo sysctl -p
Si desea que su límite sea permanente, utilice:
$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p
También es posible que deba prestar atención a los valores de max_queued_events
y max_user_instances
si escucha sigue quejándose.