必须用 composer create-project 初始化项目,它会下载完整骨架、安装依赖并执行脚本;而 init、require 或 clone 源码均无法构建可用项目,易导致 vendor 缺失、autoload 失效、artisan 不可用。

别急着写代码,先让项目跑起来——Laravel新手最容易卡在初始化和依赖管理上,不是因为不会写逻辑,而是没走对第一步。用错命令、装错位置、混淆 install 和 update,后面全是报错和玄学问题。
必须用 create-project 初始化,别手建
不要 git clone Laravel 源码,不要手动建文件夹再 composer require symfony/http-foundation……这些操作会导致 vendor/ 缺失、autoload 失效、artisan 找不到命令。Laravel 是靠 Composer 构建出来的完整应用,不是一堆可复制的 PHP 文件。
- 正确命令:composer create-project laravel/laravel my-app "11.*"(引号不能少,防止 shell 解析错误)
- 目录名 my-app 必须不存在,否则静默失败
- PHP 版本要匹配:Laravel 11 需 PHP ≥ 8.2,运行 php -v 确认,否则卡在依赖解析阶段
- 装完立刻检查 vendor/autoload.php 是否存在且可读,尤其在 WSL 或 Docker 中容易因挂载权限导致生成失败
install 和 update 别混用,生产环境只认 install
刚拉下来的项目、CI 构建、线上部署,一律用 composer install。它严格按 composer.lock 里锁定的版本安装,保证所有人、所有环境一模一样。
- composer update 是开发阶段用的:你想升级某个包,或主动同步最新兼容版本才执行
- 误用 update 上线,可能把 monolog 升到 v3,而你的日志逻辑依赖 v2 的接口,直接崩
- 生产部署脚本里必须加:composer install --no-dev --optimize-autoloader
加包 ≠ 启用包,auto-discovery 不是万能的
运行 composer require spatie/laravel-permission 只是下载代码、写入 composer.json、刷新自动加载——但服务提供者未必注册成功。
- 先确认该包是否支持 auto-discovery(看它 composer.json 的 extra.laravel.providers 字段)
- 检查你项目根目录的 composer.json,如果写了 "dont-discover": ["*"],所有包都不会自动启用
- 若禁用了 auto-discovery,就得手动往 config/app.php 的 providers 数组里加 Spatie\Permission\PermissionServiceProvider::class
- 加完记得清缓存:php artisan config:clear && php artisan cache:clear
autoload 改了就得 dump,不然类照样找不到
你在 composer.json 里新增了一段 PSR-4 映射,比如 "Modules\": "modules/",或者加了个 helpers/functions.php,PHP 还是报 Class not found 或函数未定义?因为你没刷新自动加载。
- 运行:composer dump-autoload -o(-o 表示优化,生成 class-map 加速加载)
- 这个命令不重装包,只更新映射,快且安全
- 改了命名空间、新增了全局函数、调整了目录结构,都得跑这一句











