我正在尝试将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
上运行
答案 0 :(得分:0)
nodemon
本身已达到max open file descriptors
的资源限制。这会导致nodemon崩溃。
但是,nodemon
分叉执行babel-node
作为另一个过程。我怀疑nodemon
崩溃时,babel-node
进程仍在运行。您应该能够检查ps
(或ps -f
或其他任何东西)的输出,并查看它是否仍在运行。
答案 1 :(得分:0)
您可能已经达到操作系统允许的文件监视的软限制。但是服务器运行良好,因为文件监视不是服务器不可或缺的。更改源代码时,将使用文件监视来重新加载服务器。发生这种情况的原因有两个。
由于您的文件夹结构,nodemon可能会看着额外的文件,例如node_modules
文件夹。使用--watch ./src
某些操作系统对一次可以观看多少个文件有限制。您的项目或环境可能需要观看的文件数量超出系统允许的数量。在Linux上直接更改
sysctl -n -w fs.inotify.max_user_watches=16384