新项目拉取或生产环境部署时必须用composer install精确还原依赖,而非update;install读取composer.lock确保版本一致,update会无视lock重算依赖树引发不兼容;生产环境需加--no-dev和--optimize-autoloader参数。

新项目拉取或生产环境部署时,必须用composer install精确还原依赖,而非composer update——后者会无视composer.lock重新解析整个依赖树,极易引入不兼容变更,导致php artisan命令直接崩溃或路由无法响应。
新项目初始化:用install还原锁定版本
进入项目根目录后,第一件事不是composer update,而是运行:
composer install
这一步强制读取composer.lock中记录的每一个包的确切版本号(比如symfony/console v6.4.12),确保本地、测试、生产三端完全一致。如果vendor/目录为空且composer.lock存在,install是唯一安全起点。
【必须确认 composer.lock 文件已提交到 Git】——没有它,install会退化为update行为,失去版本锁定意义。
添加新功能包:require自动写入并安装
要集成 Laravel Sanctum 进行 API 认证,执行:
composer require laravel/sanctum
这条命令会同时完成三件事:修改composer.json的require字段、下载包、执行自动加载注册。Laravel 5.5+ 的 auto-discovery 机制会自动注册服务提供者和 Facade 别名,无需手动改config/app.php。
若执行后php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"报错“class not found”,先检查根目录composer.json里是否误写了"dont-discover": ["*"]——有这行就全局禁用了自动发现,删掉即可。
生产环境部署:加参数跳过开发依赖并优化加载
在服务器上部署时,永远使用:
composer install --optimize-autoloader --no-dev
--no-dev跳过phpunitphpstan等开发工具,避免将测试代码打入生产;--optimize-autoloader生成class-map映射表,让类加载从文件扫描变为数组查找,大幅降低请求耗时。
注意:这个命令不会重装包,只刷新自动加载逻辑。如果之前已运行过install,再次执行该命令仍有效——它只优化已有结构。
依赖冲突排查:定位谁在拖慢升级
当你想升级laravel/framework却卡住,先查阻塞源头:
composer why-not laravel/framework:10.48.0
这条命令列出所有阻止你安装目标版本的包及其约束条件。常见结果是某个第三方包硬性要求"illuminate/support": "^9.0",而 Laravel 10 需要^10.0。
接着运行:
composer show -t laravel/framework
确认当前实际安装版本(括号内显示),再对比composer.lock中该包的"version"字段——如果两者不一致,说明vendor/未同步,需先rm -rf vendor && composer install彻底重建。


















