composer不安装frankenphp,仅管理php应用依赖;frankenphp是go编译的独立二进制,须通过homebrew、curl或docker安装,其核心与php类库本质不同。

Composer 不安装 FrankenPHP,它只管 PHP 依赖;FrankenPHP 是独立二进制,必须用 Homebrew、curl 或 Docker 获取。
frankenphp 二进制不能靠 composer require 装
很多人执行 composer require dunglas/frankenphp 后发现 vendor 里没可执行文件,也启动不了服务——因为该包只是个空壳(frankenphp/frankenphp 包在 Packagist 上实际不存在,官方从未发布 Composer 包)。FrankenPHP 的核心是 Go 编译的静态二进制,和 PHP 类库完全不是一类东西。
- Composer 只处理
vendor/下的 PHP 代码,比如 Laravel、Symfony 或你写的类库 -
frankenphp命令行工具必须单独安装:macOS 用brew install dunglas/frankenphp/frankenphp,Linux 用curl -LSfs https://raw.githubusercontent.com/dunglas/frankenphp/main/install.sh | sh -s -- -b /usr/local/bin - 如果你用 Laravel Octane,
artisan octane:install --server=frankenphp才会自动下载并放./frankenphp到项目根目录——这是 Octane 的封装逻辑,不是 Composer 的能力
Composer 在 FrankenPHP 项目里真正要干的三件事
一旦 frankenphp 二进制就位,Composer 就回归本职:确保你的 PHP 应用能被正确加载。关键不在“装服务器”,而在“让服务器找得到你的代码”。
- 必须运行
composer install --no-dev --optimize-autoloader:生成高效类映射,避免 FrankenPHP 启动时反复扫描文件 -
autoload配置要覆盖所有路由处理器入口,比如 Laravel 的app/Http/Controllers/和自定义的handler.php,否则请求进来时class not found - 不要删掉
vendor/autoload.php:FrankenPHP 启动时通过它加载整个应用上下文,不是靠传统index.php引入
常见报错:Class "App\Handler" not found 怎么定位
这几乎总是 Composer 自动加载配置或执行时机的问题,和 FrankenPHP 二进制本身无关。
- 检查
composer.json的autoload.psr-4是否包含 handler 所在命名空间,例如:"App\": "app/" - 确认
app/Handler.php文件顶部有namespace App;,且类名拼写与引用处完全一致(大小写敏感) - 运行
composer dump-autoload -o强制重生成映射,比单纯install更彻底 - FrankenPHP 默认不支持
.env动态加载,如果 handler 依赖环境变量,得提前用APP_ENV=prod composer dump-env prod写死
Docker 环境下 composer install 和 frankenphp 的路径陷阱
在 dunglas/frankenphp 官方镜像里,composer 和 frankenphp 是两个独立层,容易因挂载顺序出问题。
- 不要把
vendor/挂载为 Docker volume:容器重启后可能残留旧 autoload 文件,导致类找不到 - 推荐多阶段构建:第一阶段
composer install生成完整vendor/,第二阶段 COPY 进最终镜像,再 COPYfrankenphp二进制 - 如果用 Sail,
SUPERVISOR_PHP_COMMAND中的路径必须指向容器内真实位置,例如/var/www/html/artisan,不能写宿主机相对路径
最易被忽略的是 FrankenPHP 启动后不会监听文件变更——改了 composer.json 或加了新类,不手动运行 composer dump-autoload -o 并重启进程,新代码永远不会生效。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











