生产部署必须用 laravel/vapor-core(非 --dev),因 vapor 是本地 cli 工具,不参与请求生命周期;vapor-core 则需在框架启动前接管入口以解析 api gateway 事件,否则请求走原生 laravel 流程导致 502。

直接装 laravel/vapor 只能用于本地 CLI,生产部署必须用 laravel/vapor-core,且不能带 --dev。
为什么 composer require laravel/vapor --dev 不够用
这个命令只把 CLI 工具装进 vendor/bin/vapor,它不参与请求生命周期——你 deploy 出去的 Lambda 层里根本没它。Vapor 的无服务器运行依赖 laravel/vapor-core 在框架启动前接管入口(public/index.php),否则请求直接走 Laravel 原生流程,API Gateway 事件无法解析。
-
laravel/vapor是开发机命令行工具,含vapor login、vapor deploy等,仅需--dev -
laravel/vapor-core是运行时核心,必须出现在生产vendor/中,且不能被--dev过滤掉 - 若项目已用 Laravel 10.27.0+,
vapor-core ^4.0才能正常注册VaporServiceProvider;低于该版本会静默失败,APP_ENV=vapor也不生效
composer install 生产环境必须避开的坑
CI/CD 构建阶段跑 composer install,稍不注意就会漏掉关键参数,导致 ZIP 包上传后 502 或白屏。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须加
--no-dev:否则phpunit、laravel/pint等开发依赖会混入vendor/,引发Class 'TestsTestCase' not found - 必须加
--optimize-autoloader:生成vendor/composer/autoload_classmap.php,Lambda 冷启动时减少文件系统查找,实测提升首字节时间 15%~30% - 严禁在生产服务器上执行
composer install:多数 Lambda 环境无写权限、无 Composer 二进制、内存限制常为 1G,极易失败 - 确认
composer.lock已提交 Git:它锁定了laravel/vapor-core版本,避免因平台差异拉错兼容版本
vendor/autoload.php 加载顺序失效的典型表现
Vapor Core 必须比 IlluminateFoundationApplication 更早加载,否则服务提供者注册链断裂,APP_ENV=vapor 形同虚设。
- 现象:部署后日志里看不到
VaporRequestHandler初始化记录,php artisan tinker能进,但 HTTP 请求 502 - 根因:项目中手动修改过
composer.json的autoload段,或误删了"psr-4": {"App\": "app/"},导致vendor/autoload.php未按预期顺序加载vapor-core - 验证方式:在
public/index.php开头加var_dump(class_exists('LaravelVaporCoreBootstrap'));,应输出true;若为false,说明vapor-core根本没加载 - 修复动作:检查
vendor/composer/autoload_psr4.php是否包含'Laravel\Vapor\Core\' => array($vendorDir . '/laravel/vapor-core/src')
真正卡住部署的往往不是 AWS 权限或 IAM 角色,而是 vapor-core 没进 vendor、或进了但没被 autoload 机制优先加载——这两点不验清楚,调再久 CloudWatch 日志也没用。










