为什么在使用 "composer create-project" 创建项目后,依赖项不是最新的可用版本?

Why after creating a project with "composer create-project" the dependencies are not the latest available versions?

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

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

aherne@aherne-System-Product-Name:/var/www/html$ cd framework/ aherne@aherne-System-Product-Name:/var/www/html/framework$ composer update Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 0 installs, 12 updates, 0 removals - Updating lucinda/request-validator (v1.0.4 => v1.0.8.1): Downloading (100%)
- Updating lucinda/internationalization (v2.0.2 => v2.0.5): Downloading (100%)
- Updating lucinda/view-language (v2.1.1 => v2.1.7): Downloading (100%)
- Updating lucinda/sql-data-access (v2.0.1 => v2.0.2): Downloading (100%)
- Updating lucinda/errors-mvc (v1.1.4 => v1.2.1.1): Downloading (100%)
- Updating lucinda/mvc (v2.0.8 => v2.1.3): Downloading (100%)
- Updating lucinda/security (v2.0.5 => v2.0.9): Downloading (100%)
- Updating lucinda/oauth2-client (v1.6.2 => v1.6.3): Downloading (100%)
- Updating lucinda/nosql-data-access (v2.0.3 => v2.0.4): Downloading (100%)
- Updating lucinda/logging (v2.0.3 => v2.0.5): Downloading (100%)
- Updating lucinda/http-caching (v2.0.1 => v2.0.3.2): Downloading (100%)
- Updating lucinda/framework-engine (v1.2.5 => v1.3.6): Downloading (100%) Writing lock file Generating autoload files

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

因为执行 create-project 基本上等同于克隆存储库然后执行 composer install.

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

另一方面,

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

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

参考文献: