Hyperf热重载需手动安装hyperf/watcher组件并运行server:watch命令,监听app/和config/目录,默认不监听vendor/或runtime/,仅进程级重启且不自动刷新配置加载逻辑。

Hyperf 的热重载不是开箱即用的“自动生效”功能,必须显式安装 watcher 组件、启用对应命令、并理解其监听范围和限制——否则改了代码也不会重启。
安装 hyperf/watcher 组件
Hyperf 默认不带热重载能力,hyperf/watcher 是官方维护的独立组件,需手动引入:
- 执行
composer require hyperf/watcher --dev(建议加--dev,生产环境不需要) - 安装后会自动注册
server:watch命令,无需额外配置服务提供者 - 注意:该组件仅支持 Hyperf 2.2+,旧版本需先升级框架
启动 watch 模式而非 start
php bin/hyperf.php start 启动的是常驻进程,不响应文件变更;必须改用 watch 命令才能触发自动重启:
- 开发时运行
php bin/hyperf.php server:watch(不是start) - 该命令会监听
app/和config/目录下所有 PHP 文件,默认不监听vendor/或runtime/ - 若需扩展监听路径(如
resources/或自定义目录),需在config/autoload/watcher.php中修改paths配置项
修改配置后是否生效?别被“热”字误导
watcher 只负责进程重启,**不刷新配置加载逻辑**——这是最容易踩坑的地方:
- 改了
config/autoload/database.php?重启后生效 ✅ - 改了
.env文件?重启后生效 ✅(但需确保APP_ENV正确,且变量名带HYPERF_前缀) - 改了
config/autoload/dev/database.php却没设APP_ENV=dev?配置不会加载 ❌ - 改了 vendor 里的框架源码?watcher 不管,且下次 composer install 会被覆盖 ❌
watcher 重启的边界与盲区
它不是真正的“热重载”,而是进程级重启,有明确的适用前提和局限:
- 只对 Swoole 主进程有效;如果项目含 TaskWorker 或 Timer,它们也会随主进程一起重启
- 不支持单个类的增量 reload(不像 .NET/C++ 的热重载),每次都是全量重启服务
- 无法处理某些破坏性变更:比如修改了
config/autoload/dependencies.php中的依赖绑定,或新增了注解扫描路径,必须手动 stop 再 watch - 若使用 Docker,需确保文件变更能透传进容器(推荐用
bind mount,避免copy导致监听失效)
真正影响开发流速的,往往不是能不能重启,而是重启后配置有没有按你预期加载、监听路径有没有漏掉关键文件、以及环境变量是否被正确解析——这些细节不调通,watcher 就只是个会自己杀自己的进程。











