正确安装Laravel必须用composer create-project laravel/laravel,而非composer require laravel/framework;后者仅装核心包,缺失artisan、routes、app等骨架文件,导致项目无法运行。

别把 Composer 当成 Laravel 的“插件”——它是整个项目启动的基石,漏掉 vendor/autoload.php 或用错命令,Laravel 根本不会加载任何类,php artisan 会直接报错 “Command not found”。
composer install 和 composer update 到底该用哪个?
新项目拉代码后必须运行 composer install,不是 composer update。前者读取 composer.lock 精确还原所有依赖版本;后者无视 lock 文件,按 composer.json 重新解析并升级包,极易引发 Target class [xxx] does not exist 或中间件注册失败。
- CI/CD 部署脚本里只允许用
composer install --optimize-autoloader --no-dev,漏掉--optimize-autoloader会导致自动加载慢 2–3 倍 - 本地开发新增了包(比如
composer require spatie/laravel-tags),才用composer update spatie/laravel-tags,避免全量更新 - 如果执行
composer install后提示Package operations: 0 installs, 0 updates, 0 removals,说明 lock 和 json 已同步,不用硬跑 update
为什么 vendor/autoload.php 不能手动 require?
Laravel 的自动加载器不是独立入口,它被 bootstrap/app.php(Laravel 5.5+)或 bootstrap/autoload.php(旧版)调用,而后者又由 public/index.php 加载。跳过框架初始化链直接 require 'vendor/autoload.php',会导致 Config、App、Facade 全部未注册。
- 写命令行工具时若需单独加载环境,必须补全 Application 实例:
require __DIR__.'/../vendor/autoload.php'; $app = require_once __DIR__.'/../bootstrap/app.php'; - 在某个
app/Services/Helper.php里直接require 'vendor/autoload.php'后调config('app.name'),结果一定是null - Artisan 命令能运行的前提,就是
artisan文件顶部已通过require __DIR__.'/vendor/autoload.php'引入自动加载器,并完成后续引导
装完 Laravel 为什么 php artisan serve 报错?
常见错误包括 Application key not set、Class 'Mbstring' not found、Command "serve" is not defined——这些都不是 Composer 安装失败,而是初始化流程中断或环境缺失。
- 安装后必须立刻执行三步:
cp .env.example .env→php artisan key:generate→chmod -R 775 storage bootstrap/cache - PHP 缺扩展(如
mbstring、zip、xml)会导致key:generate或迁移失败,运行php -m | grep -E 'mbstring|zip|xml'快速验证 - 报
Command "serve" is not defined,99% 是因为用了composer require laravel/framework而非composer create-project laravel/laravel myapp,后者才带artisan文件和完整骨架
添加扩展包后类找不到或中间件不生效?
核心原因就两个:autoload 映射没刷新,或扩展包与当前 Laravel 版本不兼容。比如 tymon/jwt-auth v1.x 只支持 Laravel 5.8–6.x,v2.x 起强制要求 Laravel 9+;fruitcake/laravel-cors v3+ 也只适配 Laravel 9+。
- 新增类到
app/Services后,命名空间为App\Services,必须运行composer dump-autoload才能被识别 - 安装扩展后,检查其
composer.json是否含"autoload": {"psr-4": {...}},没有的话php artisan vendor:publish会静默失败 - 用
composer require spatie/laravel-tags后,必须执行php artisan vendor:publish --provider="Spatie\Tags\TagsServiceProvider" --tag="tags-migrations"再migrate,否则数据库表不存在
最易被忽略的是 composer.lock 提交——它不是临时文件,是保证所有环境依赖一致的唯一依据。删掉它再 push,等于给队友和生产环境埋雷。


















