为什么在使用"Composer Create-Project&创建项目后,依赖项不是最新的可用版本?

2022-06-20 00:00:00 php composer-php dependency-management

出于某种原因,composer create-project命令似乎拉出了过时的依赖项版本。

运行create-project后,如果我chdir创建文件夹并运行composer update,则会下载较新的版本。

aherne@aherne-System-Product-Name:/var/www/html$CD框架/ Aherne@aherne-System-Product-Name:/var/www/html/framework$作曲家更新 使用包信息更新加载Composer存储库 依赖项(包括Required-dev)包操作:0个安装, 12次更新,0次删除 -更新Lucinda/请求验证器(v1.0.4=>v1.0.8.1):下载(100%)
-更新Lucinda/国际化(v2.0.2=>v2.0.5):下载(100%)
-更新Lucinda/view-language(v2.1.1=>v2.1.7):下载(100%)
-更新Lucinda/SQL-Data-Access(v2.0.1=>v2.0.2):下载(100%)
-更新Lucinda/Errors-MVC(v1.1.4=>v1.2.1.1):下载(100%)
-更新Lucinda/MVC(v2.0.8=>v2.1.3):下载(100%)
-更新Lucinda/Security(v2.0.5=>v2.0.9):下载(100%)
-更新Lucinda/OAuth2-客户端(v1.6.2=>v1.6.3):正在下载(100%)
-更新Lucinda/NoSQL-Data-Access(v2.0.3=>v2.0.4):下载(100%)
-更新Lucinda/Logging(v2.0.3=>v2.0.5):下载(100%)
-更新Lucinda/http-cering(v2.0.1=>v2.0.3.2):正在下载(100%)
-正在更新Lucinda/framework-Engine(v1.2.5=>v1.3.6):正在下载(100%)写入锁文件生成自动加载文件

为什么composer create-project不首先下载最新的依赖项版本?


解决方案

因为执行create-project基本上相当于克隆存储库,然后执行composer install

install下载composer.lock中声明的依赖项,其中包括特定的版本声明。运行install应该是安全的,并且只安装存储库中显式存储的声明的依赖项版本。

update则读取composer.json上声明的版本约束,下载满足这些约束的每个包的最新可用版本,然后然后更新composer.lock

这种行为对于全新的安装是不安全的,因为不仅您的直接依赖项会更新,而且可以更新的依赖项的任何依赖项也会更新,并且可能会意外地引入兼容性问题。项目中的锁定文件表示可用于安全安装按预期工作的项目的已知良好状态。

引用:

  • create-project
  • install
  • update

相关文章