Достигнуто системное ограничение на количество файловых наблюдателей при попытке запустить выставочный проект

Кажется, что этот вопрос есть повсюду на SO, но ответы, похоже, не касаются моей ситуации. Я только начинаю работать с nodejs и реагирую родным образом, поэтому я установил nodejs и выполнил следующие команды, чтобы начать:

$ npm install expo-cli
$ npm update
$ npx expo init helloWorld

Я выбрал минимальный простой рабочий процесс и начал с npx expo start. npx не смог найти expo-cli, поэтому я переместил каталог node_modules в каталог helloWorld и снова начал с npx expo start. На этот раз проект запускается нормально, но сразу выдает ошибку о превышении количества наблюдателей, скорее всего, из-за большого количества файлов, которые он пытается просмотреть после добавления каталога node_modules:

internal/fs/watchers.js:186
    throw error;
    ^

Error: ENOSPC: System limit for number of file watchers reached, watch '/home/drew/helloWorld/node_modules/css-tree'
    at FSWatcher.<computed> (internal/fs/watchers.js:178:26)
    at Object.watch (fs.js:1445:34)
    at NodeWatcher.watchdir (/home/drew/helloWorld/node_modules/sane/src/node_watcher.js:159:22)
    at Walker.<anonymous> (/home/drew/helloWorld/node_modules/sane/src/common.js:109:31)
    at Walker.emit (events.js:315:20)
    at /home/drew/helloWorld/node_modules/walker/lib/walker.js:69:16
    at FSReqCallback.oncomplete (fs.js:163:23) {
  errno: -28,
  syscall: 'watch',
  code: 'ENOSPC',
  path: '/home/drew/helloWorld/node_modules/css-tree',
  filename: '/home/drew/helloWorld/node_modules/css-tree'
}

Все основные ответы, которые я нашел здесь в поисках решений, были связаны со сторожем, но у меня его нет, и реагировать на него, похоже, вместо этого используется fs.watch. один важный вопрос, который я нашел, предполагает, что нет возможности добавить список игнорирования, как в watchman:

Не похоже, что это возможно. Просто посмотрите на путь в слушателе и ничего не делайте, если он начинается с node_modules.

Это не может сильно сказаться на производительности, если только вы не обновляете модули постоянно во время работы узла, что было бы немного странно.

Разве я не должен так настраивать свою среду разработки? Я хочу максимально изолировать проекты (исходящие от python, где virtualenv очень важен), но похоже, что это создает больше проблем, чем я ожидал. Как я могу это исправить, не прибегая к установке всего глобального?


person Drew    schedule 18.06.2020    source источник


Ответы (1)


Похоже, вы пропустили шаг после npx expo init.

При запуске npx expo start и отказе от установки expo-cli глобально вы должны были вызвать npm install --save-dev expo-cli, чтобы добавить его в зависимости в helloworld/package.json и установить в helloworld/node_modules.

Ошибка наблюдателя возникает из-за исчерпания количества наблюдений пользователя в inotify: https://linux.die.net/man/2/inotify_add_watch

Его можно настроить с помощью sysctl, см. Соответствующие подробности здесь: https://stackoverflow.com/a/59726128/4173186 - К сожалению, мне не удалось найти описание этого sysctl в документации ядра Linux.

person Xelnor    schedule 20.06.2020