推荐直接用 composer create-project 安装指定 Laravel 版本,无需全局 laravel/installer;支持安装最新版、主版本(如 "10.*")、精确小版本(如 "9.52.16")及开发依赖版(--dev),更干净可控。

直接用 composer create-project 指定版本号就能装,不需要先装全局 Laravel 安装器(laravel/installer),后者反而容易引发版本混淆和缓存问题。
用 create-project 安装指定 Laravel 版本
这是最干净、最可控的方式。Composer 会自动解析依赖并下载对应版本的完整项目骨架。
- 安装最新稳定版(如 Laravel 11):
composer create-project laravel/laravel my-app
- 安装特定主版本(如 Laravel 10.x 最新版):
composer create-project laravel/laravel my-app "10.*"
- 安装精确小版本(如 Laravel 9.52.16):
composer create-project laravel/laravel my-app "9.52.16"
- 安装带开发依赖的版本(含
phpunit、pestphp等):composer create-project laravel/laravel my-app --dev
注意:"10.*" 中的引号在 Shell 中必不可少,否则 * 会被 shell 展开为当前目录文件名,导致报错 Could not find package laravel/laravel with version 10.。
为什么不用 laravel new?
laravel new 是 laravel/installer 提供的命令,它底层仍调用 create-project,但自带缓存逻辑和默认模板(比如强制拉取 GitHub release zip 包),容易出现以下问题:
- 缓存未更新时,
laravel new my-app --version=10可能仍装出 9.x - 某些网络环境下无法访问 GitHub Releases,卡在
Downloading... -
--version参数只支持主版本号(如10),不支持10.48.20这类精确版本 - 装完后
composer.lock里记录的laravel/framework版本可能和预期不符(因 installer 自行替换过composer.json)
安装后验证版本是否正确
别只看目录名或 README,实际版本以 composer.lock 和运行时为准:
- 检查锁文件:
grep '"laravel/framework"' composer.lock -A 2
- 查看已加载框架版本(确保应用能跑起来):
php artisan --version
- 若提示
Command "–version" is not defined,说明 Artisan 未正常加载,大概率是vendor/autoload.php路径错误或 Composer 自动加载未生成 —— 此时执行composer dump-autoload
特别注意:Laravel 11 默认启用 bootstrap/app.php 引导方式,若你从旧版本升级或手动改过引导逻辑,artisan 可能根本起不来,这时 --version 就不可靠,必须查 composer.lock。
常见失败场景与绕过方法
遇到 create-project 卡住或报错,优先排查这几点:
- PHP 版本不匹配:Laravel 11 要求 PHP 8.2+,装
"11.*"却用 PHP 8.1 会直接报Your requirements could not be resolved—— 用php -v
确认 - 国内源没切对:如果用了阿里云或腾讯云镜像,但镜像同步延迟,可能导致找不到新 tag;临时切回官方源:
composer config -g repo.packagist composer https://packagist.org
- 权限问题:在系统级
/usr/local或/opt下运行会因写入失败中断;一律在用户目录下操作,如~/projects/my-app - HTTPS 证书异常(尤其企业网络):加
-n跳过 SSL 验证(仅调试用):composer create-project -n laravel/laravel my-app "10.*"
真正麻烦的不是“怎么装”,而是装完发现 APP_KEY 没自动生成、storage 权限不对、或者 .env 里数据库配置还是默认值 —— 这些不会报错,但会让你在第一次 php artisan migrate 时才暴露出来。










