
composer create-project 装 Laravel 为什么总卡住或报错
直接用 composer create-project laravel/laravel 是最标准的方式,但实际执行时经常卡在「Resolving packages」或抛出 Could not find package laravel/laravel。核心原因不是命令写错了,而是 Composer 默认源(packagist.org)在国内访问不稳定,且 Laravel 新版本对 PHP 版本、扩展有硬性要求。
- 先确认本地 PHP 版本 ≥ 8.1(Laravel 11 起强制要求),运行
php -v;缺ext-mbstring或ext-openssl会直接失败,用php -m | grep -E "mbstring|openssl"检查 - 换国内镜像源比调低 Composer 超时更有效:执行
composer config -g repo.packagist composer https://packagist.phpcomposer.com(注意:该源已停用,应改用https://mirrors.aliyun.com/composer/) - 如果只是临时创建项目,加
--prefer-dist --no-interaction参数能跳过交互和开发依赖下载,明显提速
laravel new 和 create-project 有什么区别
laravel new 是 Laravel 官方提供的快捷命令,本质是封装了 create-project 并预设了部分参数;但它依赖全局安装的 laravel/installer,而后者本身又依赖 Composer。两者不是互斥关系,而是分层工具。
-
laravel new myapp会自动下载最新稳定版 Laravel,并运行npm install和php artisan key:generate,适合快速启动本地开发 -
composer create-project laravel/laravel myapp "10.*"更灵活,可指定版本约束(如"10.*"或"dev-main"),适合需要固定大版本或测试预发布版的场景 - 若提示
Command "laravel" is not defined,说明没装laravel/installer,此时别硬试,直接用create-project更可控
安装后 vendor/autoload.php 找不到或 Class not found
这通常不是安装失败,而是项目目录结构或自动加载机制没触发。Laravel 的 autoload.php 在 vendor/autoload.php,但它的可用性依赖 Composer 自动生成的类映射文件,一旦缺失或损坏就会报 Class 'IlluminateFoundationApplication' not found 这类错误。
- 进入项目根目录后,必须手动运行一次
composer dump-autoload,尤其当你从 Git 克隆而非create-project安装时 - 检查
composer.json中的"autoload"配置是否被误删——Laravel 默认有"psr-4": {"App\": "app/", "Database\Factories\": "database/factories/", "Database\Seeders\": "database/seeders/"} - Windows 下若用 WSL 启动
php artisan serve却提示找不到类,大概率是vendor目录权限或符号链接问题,删掉vendor和composer.lock重装
部署到生产环境时 composer install 总失败
线上服务器往往禁用 ext-zip 或没开 allow_url_fopen,导致 Composer 下载包时直接中断。更重要的是,生产环境不该跑 create-project,而应走标准的 composer install --no-dev --optimize-autoloader 流程。
-
--no-dev不仅省空间,还避免phpunit等开发依赖引发的冲突;--optimize-autoloader生成vendor/composer/autoload_classmap.php,提升类加载速度 - 若报
Failed to extract ...: unable to unzip,优先检查磁盘空间和unzip命令是否存在(Ubuntu 需apt install unzip) - CI/CD 中建议用
composer install --no-interaction --no-progress,避免因终端交互超时中断
.env 文件不会被 Composer 处理,必须手动上传或通过部署脚本注入,且 APP_KEY 必须在首次运行前生成,否则所有加密功能(session、cookie)全挂。










