nodemon с bable-node падает в терминале, но сервер работает нормально? - PullRequest
3 голосов
/ 30 мая 2019

Я пытаюсь использовать nodemon с bable-node. У меня есть эта команда в моем package.json:

"open-graph-playground": "nodemon --exec babel-node src/graphql/mock-server.js",

Это файл JavaScript:

import fs from 'fs';
import open from 'open';
import { buildSchema } from 'graphql';
import express from 'express';
import graphqlHTTP from 'express-graphql';

import root from './root';

const schemaString = fs.readFileSync(`${__dirname}/schema.graphql`, 'utf8');
const app = express();
const schema = buildSchema(schemaString);

app.use(
  '/mock-graphql-playground',
  graphqlHTTP({
    schema,
    rootValue: root,
    graphiql: true,
  }),
);

app.listen(4001);

open('http://localhost:4001/mock-graphql-playground');

Когда я запускаю yarn open-graph-playground в своем терминале, я получаю эту ошибку:

yarn run v1.13.0
$ nodemon --exec babel-node src/graphql/mock-server.js
[nodemon] 1.18.10
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `babel-node src/graphql/mock-server.js`
2019-05-30 15:45 node[1683] (FSEvents.framework) FSEventStreamStart: register_with_server: ERROR: f2d_register_rpc() => (null) (-22)
2019-05-30 15:45 node[1683] (FSEvents.framework) FSEventStreamStart: register_with_server: ERROR: f2d_register_rpc() => (null) (-22)
[nodemon] Internal watch failed: EMFILE: too many open files, watch
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

Странно то, что, хотя процесс в терминале закрылся, сервер работает на http://localhost:4001/mock-graphql-playground

Ответы [ 2 ]

0 голосов
/ 09 июня 2019

Возможно, вы достигли мягкого лимита просмотра файлов, разрешенного операционной системой. Но сервер работает нормально, так как просмотр файлов не является неотъемлемой частью сервера. Наблюдения за файлами используются для перезагрузки сервера при изменении исходного кода. Это может произойти по двум причинам.

1. Nodemon просматривает файлы вне проекта

Из-за структуры вашей папки nodemon может просматривать дополнительные файлы, такие как ваша папка node_modules. Укажите на nodemon правильный каталог, используя --watch ./src

2. Ваш проект содержит больше файлов, чем предел просмотра

Некоторые операционные системы имеют ограничение на количество файлов, которые можно просматривать одновременно. Вашему проекту или вашей среде может потребоваться просмотр большего количества файлов, чем разрешено системой. Поменять это на linux просто

sysctl -n -w fs.inotify.max_user_watches=16384

Дополнительная информация и источник

0 голосов
/ 07 июня 2019

nodemon сам достиг лимита ресурса max open file descriptors.Это приводит к сбою nodemon.

Однако nodemon вызывает выполнение babel-node как другой процесс.Я подозреваю, что при сбое nodemon процесс babel-node все еще выполняется.Вы должны быть в состоянии проверить вывод ps (или ps -f, или что-то еще) и увидеть, что он все еще работает.

...