应使用 composer create-project 初始化项目,它会下载完整源码、安装全部依赖并执行安装脚本;而 composer init 仅生成空配置文件,composer require 仅添加包,无法构建项目骨架。

直接用 composer create-project 就行,别碰 laravel/installer —— 官方已不推荐,多一层封装反而容易卡在 autoload 或版本错乱上。
为什么 create-project 会报错或卡住
不是命令写错了,八成是环境没对齐:
- PHP 版本不匹配:Laravel 11 要求
php >= 8.2,Laravel 10 是php >= 8.1;运行php -v确认,否则错误堆栈里根本不会提“PHP 太旧”,而是抛一堆requires php ^8.2的依赖冲突 - 扩展缺失:
mbstring、tokenizer、openssl这几个缺一个,create-project就可能静默退出或后续php artisan报看似无关的语法错误(比如The use statement with aliasing is not allowed here) - 镜像源不同步:国内镜像偶尔滞后,尤其新 Laravel 版本刚发布时,
Could not find package laravel/laravel很可能是源没更新,临时切回官方源:composer config -g repo.packagist composer https://packagist.org
create-project 必须加引号的版本参数
写成 composer create-project laravel/laravel myapp 11.* 会出事——shell 把 * 当通配符展开,可能匹配到当前目录下文件,导致装错包甚至失败。
正确写法只有两种:
-
composer create-project laravel/laravel myapp "11.*"(推荐,清晰、兼容所有 shell) -
composer create-project laravel/laravel:^11.0 myapp(^必须和包名紧挨着,不能空格)
别写 11 或 v11,Laravel 官方 tag 没 v 前缀;也别漏 --prefer-dist,它强制走压缩包安装,比 Git clone 快得多,尤其在国内网络下。
项目生成后 vendor/autoload.php 找不到
这不是安装失败,是依赖根本没装上。常见于:
- CI/CD 或 Docker 构建中加了
--no-install(脚手架只拉骨架,不跑composer install) - 网络中断导致
install步骤被跳过,但命令本身已返回成功 - 误在已有
vendor/的目录下重复执行,create-project默认不覆盖
立刻进项目目录验证:ls -l vendor/autoload.php。不存在就补装:composer install --no-interaction。别用 composer update 替代,它读的是 composer.lock,而新项目还没这个文件。
创建完不能直接访问?三件事必须手动做
Composer 只管代码和依赖,Laravel 的运行态配置得自己补全:
- 生成密钥:
php artisan key:generate,否则 session、加密、CSRF 全崩 - 复制并改
.env:cp .env.example .env,至少填DB_DATABASE、DB_USERNAME;SQLite 用户还得确保database/database.sqlite存在且可写 - 设权限:
chmod -R 775 storage bootstrap/cache(Linux/macOS),Windows 下要确认 Web 服务器进程有写权限
漏掉任意一项,php artisan serve 能起来,但一访问路由就 500 或白屏——问题不在框架,而在这些被忽略的初始化细节。











