新项目必须用 composer install,它按 composer.lock 精确还原依赖;误用 composer update 会无视 lock 文件导致不兼容。

别把 Composer 当成 Laravel 的“插件”——它是整个项目启动的基石,漏掉 composer install 或搞错 composer.lock,Laravel 根本跑不起来。
新项目拉下来第一件事:必须用 composer install,不是 composer update
刚 clone 一个 Laravel 项目,composer install 是唯一正确动作。它会严格按 composer.lock 里记录的版本安装依赖,确保所有人、所有环境(包括 CI/CD)装出完全一致的 vendor/。
- 如果误用
composer update,它会无视lock文件,重新解析composer.json并升级所有可更新包——哪怕只升一个小版本,也可能导致Target class [xxx] does not exist或中间件注册失败 - 运行
composer install后提示Package operations: 0 installs, 0 updates, 0 removals?说明lock和json已同步,不用硬跑 update -
composer.lock必须提交进 Git。没它,不同机器上composer install可能装出不同版本,这是线上 500 错误最隐蔽的源头之一
加新包时,只用 composer require,别手动改 composer.json
想引入 spatie/laravel-permission 或 superbalist/laravel-google-cloud-storage,直接执行命令即可,不要手写 composer.json 再 update。
-
composer require spatie/laravel-permission会自动写入composer.json、下载包、刷新 autoload 映射,一步到位 - 手动改
json后只跑composer update(不带包名)极危险:它会全量升级所有依赖,大概率破坏兼容性 - 开发中新增了类但报
Class not found?先试composer dump-autoload,比重装 vendor 快得多 - 生产部署时加
--optimize-autoloader --no-dev:跳过开发包,生成优化后的加载映射,提升响应速度
Laravel 启动流程里,vendor/autoload.php 不是入口,别直接 require
看到教程里写 require 'vendor/autoload.php' 就照抄?在 Laravel 里这大概率导致 config('app.name') 返回 null 或 Facade 未注册。
- Laravel 正确加载链是:
public/index.php→bootstrap/app.php→ 自动加载器 + Service Provider 注册 - 直接
require 'vendor/autoload.php'绕过了整个框架初始化,Config、Database、Routing 全都没加载 - 写命令行工具或调试脚本时,若需单独加载 Laravel 环境,应
require __DIR__.'/../vendor/autoload.php';后再手动构建Application实例 - 检查是否加载成功?看
php artisan about输出的 Laravel 版本,以及storage/logs/laravel.log里有没有类找不到错误
升级 Laravel 主版本(如 9 → 10)不能只改 composer.json
把 "laravel/framework": "^9.0" 改成 "^10.0" 然后 composer update,几乎必然失败。主版本升级不是换包,是重构整个底层契约。
- 先确认 PHP 版本达标(Laravel 10 需 PHP 8.1+,Laravel 11 需 PHP 8.2+),否则
composer update会卡在依赖解析 - 运行
composer update "laravel/framework" --with-dependencies,强制连带更新laravel/tinker、nesbot/carbon等强关联包 - 升级后重点盯
storage/logs/laravel.log:大量Target class [xxx] does not exist往往意味着 Service Provider 被移除或重命名,比如旧版Tymon\JWTAuth\Providers\JWTAuthServiceProvider在 Laravel 9+ 已不可用 - 官方
laravel-shift工具能自动改代码,但实际项目中更稳妥的是对照升级指南逐项检查配置文件和中间件注册方式
真正容易被忽略的点是:Composer 不只是装包工具,它决定了类能不能被找到、配置能不能生效、甚至错误日志写不写得进文件。很多“Laravel 报错”,根源不在框架本身,而在 composer.lock 没提交、autoload 没刷新、或 vendor/autoload.php 被错误地提前加载。











