Composer怎么安装旧版Laravel_指定版本号安装框架教程【指南】

3次阅读

推荐使用 composer create-project 指定版本安装 laravel,如 laravel/laravel:^8.0;laravel/installer 不支持版本参数且存在兼容风险;需确保 php 版本匹配,并注意装后维护安全问题。

Composer怎么安装旧版Laravel_指定版本号安装框架教程【指南】

直接用 composer create-project 加版本约束就能装指定 Laravel 版本,不需要先装旧版 Composer 或改全局配置。

create-project 指定 Laravel 版本号

Composer 官方推荐方式,也是最可靠的方法。它会拉取对应版本的 laravel/laravel 项目骨架(含 composer.json),再递归安装其依赖的 Laravel 组件(如 illuminate/support 等)到匹配版本。

常见写法:

  • composer create-project laravel/laravel:^8.0 myapp —— 安装 8.x 最新小版本(如 8.83.27)
  • composer create-project laravel/laravel:8.75.0 myapp —— 精确安装 8.75.0
  • composer create-project laravel/laravel:7.* myapp —— 安装任意 7.x 版本(通常为 7.30.6)

注意:laravel/laravel 是应用骨架包,不是框架核心;它的 composer.json 中已锁死各 illuminate/* 包的版本范围,所以你指定骨架版本,就等于间接锁定了整个框架版本。

为什么不用 composer global require laravel/installer

因为 laravel/installer 工具本身有版本迭代,新版 installer 默认只创建最新 LTS 或稳定版 Laravel(比如 v4.4+ 的 installer 默认建 Laravel 11),它不支持传入版本参数。即使你降级了 laravel/installer,也无法保证它能识别并拉取早已 EOL 的旧版(如 5.5、6.x)。

更关键的是:laravel/installer 底层其实也是调用 create-project,绕路没意义,还多一层兼容风险。

装完发现版本不对?检查这三处

常见“以为装了旧版,实际跑的是新版”的原因:

  • 运行了 php artisan --version,但项目里混进了高版本的 artisan 或缓存 —— 先删掉 bootstrap/cache/config.phpbootstrap/cache/services.php
  • composer.json"laravel/framework" 的版本约束被手动改宽(如从 "^8.75" 改成 "^8.0 || ^9.0"),后续 composer update 就可能升上去
  • 执行了 composer update 且没加 --with-all-dependencies 或锁死策略,导致部分 illuminate 包升级,引发不兼容(例如 8.x 项目里 illuminate/database 升到 9.x 就会报错 class "IlluminateSupportServiceProvider" not found

PHP 版本和旧 Laravel 的硬性匹配

Laravel 各版本对 PHP 有明确最低要求,装之前必须确认本地 PHP 版本满足条件,否则 create-project 会失败或中途退出:

  • Laravel 9.x → PHP >= 8.0
  • Laravel 8.x → PHP >= 7.3
  • Laravel 7.x → PHP >= 7.2.5
  • Laravel 6.x → PHP >= 7.2
  • Laravel 5.8 → PHP >= 7.1.3

如果 PHP 版本不够,composer create-project 会报类似 Your requirements could not be resolved to an installable set of packages.,错误信息里往往带 laravel/framework v8.x.x requires php ^7.3 这类提示 —— 别忽略它,这是最直接的线索。

真正麻烦的不是“怎么装”,而是装完后长期维护:旧版 Laravel 停止安全更新后,composer update 可能悄悄引入有漏洞的依赖,或者因第三方包升级而崩溃。动手前,先想好这个项目是否真需要钉在旧版本上。

text=ZqhQzanResources