You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Nodemon实现Node服务自动重载及浏览器刷新问题排查

问题解决指南

一、Nodemon重启后JSON修改不生效

问题根源是Node.js的require缓存机制:当用require()加载JSON文件时,Node会把内容缓存到内存中,即便Nodemon重启服务器,若代码未清除缓存,依然会读取旧的JSON数据。

解决办法:

  • 改用文件系统读取JSON,绕过require缓存:
    const fs = require('fs');
    // 每次读取直接从文件获取最新内容
    function getLatestJsonData() {
      return JSON.parse(fs.readFileSync('/Users/shaned/repos/frontend/content/your-target-file.json', 'utf8'));
    }
    
  • 若坚持用require,手动清除缓存:
    在读取JSON前先删除对应缓存:
    const jsonModulePath = require.resolve('/Users/shaned/repos/frontend/content/your-target-file.json');
    delete require.cache[jsonModulePath];
    const jsonData = require(jsonModulePath);
    
  • 额外验证:确认nodemon.json里的watch路径无拼写错误,目标JSON文件确实在指定目录范围内。

二、JavaScript堆内存溢出错误

Node.js v10默认堆内存限制较低,长时间运行或代码存在内存泄漏时易触发该错误。

解决办法:

  • 启动时扩大堆内存限制:在启动命令中加入--max-old-space-size参数调整内存上限(单位为MB):
    NODE_PATH=$SERVER nodemon --max-old-space-size=4096 $SERVER/backend/app.js --conf $TEST_ROOT/default.conf --test:geoip:code ""
    
    可根据实际情况调整数值,比如2048、8192等。
  • 排查内存泄漏:
    • 用node --inspect启动服务器,通过Chrome DevTools的Memory面板分析内存占用,定位未释放的资源(如定时器、事件监听器、全局变量)。
    • 确保代码中及时清理不再使用的变量、关闭数据库连接或文件句柄。

三、替代工具方案

针对Angular项目,建议拆分前后端热重载逻辑:

  1. 前端热重载:直接用Angular CLI的ng serve,自带前端文件修改后的自动刷新,无需依赖后端重启。可通过proxy.conf.json配置代理,让前端请求转发到Node后端。
  2. 后端自动重载:
    • PM2:稳定性优于Nodemon,支持watch模式:
      pm2 start $SERVER/backend/app.js --watch /Users/shaned/repos/backend/server /Users/shaned/repos/frontend/content --ignore-watch="node_modules" -- --conf $TEST_ROOT/default.conf --test:geoip:code ""
      
    • Supervisor:轻量的Node进程监控工具,安装后直接启动:
      supervisor -w /Users/shaned/repos/backend/server,/Users/shaned/repos/frontend/content $SERVER/backend/app.js --conf $TEST_ROOT/default.conf --test:geoip:code ""
      

内容的提问来源于stack exchange,提问作者Shane D'Silva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 07:18:18