Nodemon不自动刷新求助:修改代码后浏览器无变化
以下是几个经过验证的排查方向和解决办法:
强制刷新浏览器缓存
浏览器大概率缓存了旧的响应内容,按Ctrl+F5(Windows/Linux)或Cmd+Shift+R(macOS)强制刷新页面,或者直接用无痕模式打开测试,排除浏览器缓存干扰。确认服务是否真的完成重启
在你的index.js开头加一行日志:console.log('服务已启动/重启:', new Date().toLocaleString())修改代码后看终端是否输出新的日志。如果没有,说明nodemon的文件监听没生效;如果有,那问题出在服务本身或浏览器。
配置nodemon监听所有需要的文件类型
nodemon默认只监听.js、.mjs等少数文件类型,如果你修改的是模板文件(如.ejs、.pug)、静态资源(.css、.html)或配置文件(.json),需要手动指定监听扩展名:- 临时方案:启动时加参数
nodemon -e js,json,ejs,css index.js - 持久方案:在项目根目录创建
nodemon.json文件,内容如下:{ "ext": "js,json,ejs,css,html" }
- 临时方案:启动时加参数
检查代码中的缓存逻辑
如果你的服务里有模块缓存、数据缓存逻辑,比如启动时一次性加载配置文件并缓存,或者用了内存缓存库,即使nodemon重启了服务,也要确保这些缓存会在重启时被重置。比如对于require加载的模块,Node.js会缓存模块内容,nodemon重启服务会重新加载所有模块,但如果代码里有自定义的持久缓存逻辑,需要排查是否影响了更新。解决系统文件监听限制
部分Linux/macOS系统对文件监听的数量有限制,导致nodemon无法检测到文件变化:- macOS:终端执行
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p - Linux:执行
echo 524288 | sudo tee /proc/sys/fs/inotify/max_user_watches(临时生效,重启后需重新执行,或写入sysctl配置文件持久生效)
- macOS:终端执行
禁用nodemon默认忽略规则
nodemon默认会忽略node_modules、.git等目录,也会读取.gitignore里的规则,如果你的工作目录被误忽略了,可以在nodemon.json里设置:{ "ignore": [] }或者手动指定需要监听的目录:
{ "watch": ["./src", "./views"] }
内容的提问来源于stack exchange,提问作者Kotejichizu

