为什么在使用 "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
.
这种行为对于全新的安装来说是不安全的,因为不仅你的直接依赖项会被更新,而且任何可以更新的依赖项的依赖项也会被更新,并且可能会意外引入兼容性问题。项目中的锁定文件代表 已知良好 状态,可用于安全安装按预期工作的项目。
参考文献:
出于某种原因,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
.
这种行为对于全新的安装来说是不安全的,因为不仅你的直接依赖项会被更新,而且任何可以更新的依赖项的依赖项也会被更新,并且可能会意外引入兼容性问题。项目中的锁定文件代表 已知良好 状态,可用于安全安装按预期工作的项目。
参考文献: