FrankenPHP 1.5 开启代码热更新的核心是启用 watch: true,需在项目根目录的 frankenphp.yaml 中配置,并确保 FRANKENPHP_WORKER=1 环境变量已设置;它仅监听 .php、.yaml、.yml、.env、.ini 文件变更,触发旧 worker 优雅退出与新实例拉起。

FrankenPHP 1.5 开启代码热更新,核心就是启用 watch: true,它已内建在 FrankenPHP ≥ 1.2 中,无需额外工具或脚本。
必须配置 frankenphp.yaml 并放在项目根目录
热更新监听路径固定为 frankenphp.yaml 所在目录(即项目根),不是 public/ 或 src/。文件内容至少包含:
-
watch: true—— 这是唯一开关,缺了就完全不监听 -
env:下确保有FRANKENPHP_WORKER: "1"(或通过环境变量设置) - 可选但推荐:
max_requests: 500防止内存缓慢增长
确认监听的文件类型和范围
默认只响应以下后缀变更并触发 SIGTERM 旧 worker、拉起新实例:
-
.php、.yaml、.yml、.env、.ini - 仅监控项目根目录及其子目录,不进入 vendor/
- 若需忽略 IDE 临时文件(如
.php.swp),加ignore: [".*"]
启动方式要匹配 worker 模式
热更新只对 worker 模式生效,普通请求模式下无意义:
立即学习“PHP免费学习笔记(深入)”;
- 用
frankenphp run启动(不是serve) - Caddyfile 中
php_server块必须含worker指令 - 启动日志应出现
Starting PHP worker pool,而非仅Starting FrankenPHP server
注意 vendor 更新和 OPcache 的边界
改了 Composer 包?watch 不管——vendor 目录不在监听范围内:
- 更新依赖后,需手动调用
opcache_reset()或重启整个 FrankenPHP 进程 - 确保 CLI 模式开启 OPcache(
opcache.enable_cli = 1),否则 require 动态加载会变慢 - 若用 Symfony/Laravel,避免在入口外初始化单例或长连接,否则新 worker 仍复用旧状态



















