首页 > 解决方案 > 为什么在使用“composer create-project”创建项目后,依赖项不是最新的可用版本?

问题描述

出于某种原因,composer create-project命令似乎提取了陈旧的依赖项版本。

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

aherne@aherne-System-Product-Name:/var/www/html$ cd framework/ aherne@aherne-System-Product-Name:/var/www/html/framework$ composer update 使用包信息加载 composer 存储库 更新依赖项 (包括 require-dev) 包操作:0 次安装,12 次更新,0 次删除 - 更新 lucinda/request-validator (v1.0.4 => v1.0.8.1):下载 (100%)
- 更新 lucinda/internationalization (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-client ( 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-caching (v2.0.1 => v2.0.3.2): 下载 (100%)
- 更新 lucinda/framework-engine (v1.2.5 => v1 .3.6): 下载 (100%) 写入锁定文件 生成自动加载文件

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

标签: phpcomposer-phpdependency-management

解决方案


因为做一个create-project基本上相当于克隆存储库,然后做一个composer install.

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

update另一方面,读取在 上声明的版本约束composer.json,下载符合这些约束的每个包的最新可用版本,然后更新composer.lock.

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

参考:


推荐阅读