nodemon正常运行但无输出,直接运行node文件有输出如何解决?
问题原因
- 从给出的日志可以看到nodemon一直在频繁触发重启,核心原因是nodemon默认监听当前目录下所有匹配后缀的文件,一旦有文件持续变更(比如自动生成的日志文件、临时缓存文件、本地数据库文件等)就会触发重启,node进程每次启动后还没来得及执行业务逻辑输出日志,就被新的重启操作终止,因此看不到业务内容输出。
- 小概率原因是控制台输出缓冲配置问题,nodemon运行时node的输出被缓冲没有即时打印到控制台。
解决方法
1. 配置忽略规则,避免无关文件触发重启
在项目根目录新建nodemon.json配置文件,添加需要忽略的频繁变更的文件/目录,示例配置如下:
{ "ignore": [ "node_modules/", "*.log", "tmp/", "cache/", "*.db" ] }
也可以直接在启动命令中添加忽略参数:nodemon --ignore '*.log' --ignore node_modules/ .\index.js
2. 明确指定监听范围
如果不需要监听整个项目目录,可以手动指定要监听的业务代码路径,大幅降低误触发重启的概率:nodemon --watch src/ .\index.js
上述命令只会监听src目录下的文件变更,其他目录的改动不会触发重启。
3. 关闭输出缓冲
如果配置完重启规则后依然看不到业务输出,可以添加node无缓冲运行参数,强制即时打印输出:
在nodemon.json中添加exec配置:
{ "exec": "node --unbuffered .\\index.js", "ignore": [ "node_modules/", "*.log" ] }
或者直接使用启动命令:nodemon --exec "node --unbuffered" .\index.js
配置完成后重启nodemon,即可正常看到业务输出,且不会频繁触发重启。
内容的提问来源于stack exchange,提问作者Prashant Chouhan
相关产品推荐
相关产品推荐

