Hyperf 3.1需通过php bin/hyperf.php server:watch启用热更新,安装hyperf/watcher后配置watcher.php监听目录,修改代码自动生效,但vendor变更仍需手动重启。

Hyperf 3.1 开发时修改代码不生效,必须重启服务才能看到效果,严重影响调试效率和本地开发节奏。
启用热更新:安装 watcher 组件并启动 watch 模式
进入项目根目录,执行以下命令安装热更新支持组件:
composer require hyperf/watcher
安装完成后,直接运行 watch 命令启动服务:
php bin/hyperf.php server:watch
此时服务将以 watch 模式运行,自动监听文件变更。注意:【不要同时运行 php bin/hyperf.php start 和 server:watch】,否则端口冲突且 watch 不会接管进程。
热更新生效范围与限制
默认情况下,server:watch 只监控 app/ 和 config/ 两个目录下的 PHP 文件变更。
若需监听其他路径(如 tests/ 或自定义的 src/),需手动修改 watcher 配置:
编辑 config/autoload/watcher.php,找到 paths 键,追加目标路径数组:
'paths' => ['app/', 'config/', 'src/', 'tests/'],
修改后需重启 watch 进程才生效——这一步容易被忽略,改完配置不重启,新增路径始终不会被监听。
热更新不触发全量 reload,而是选择性 reload 变更类及其依赖链;但 【vendor/ 下的依赖代码修改不会触发热更新】,这类变更仍需手动重启。
验证热更新是否真正工作
第一步:在任意 Controller 方法中插入一行日志,例如 echo "v1\n"; die;
第二步:访问对应接口,确认输出 v1
第三步:将 echo "v1\n"; 改为 echo "v2\n";,保存文件
第四步:刷新页面,观察是否立即输出 v2
若仍输出 v1,说明热更新未生效。此时检查:① 是否正在运行 server:watch 而非 start;② runtime/container/ 目录是否存在残留缓存(存在则 rm -rf runtime/container/ 后重试);③ 当前 PHP 进程是否由 watch 启动(ps aux | grep watch 确认)


















