jakoch / composer-fastfetch
Fastfetch - 一个将包下载到缓存的Composer插件。
Requires
- composer-plugin-api: ^1.0
Requires (Dev)
- composer/composer: ^1.0
- phpunit/phpunit: ^4.5
This package is auto-updated.
Last update: 2024-09-05 18:15:51 UTC
README
Composer插件FastFetch快速并行地将包下载到您的Composer缓存中。
要求
- 外部下载工具 - Aria2
- 此包需要一个名为 "aria2" 的外部下载工具。
- 您可以在以下位置找到最新版本:https://github.com/tatsuhiro-t/aria2/releases/latest
- Linux,例如Travis:
sudo apt-get install -y aria2
- Windows:手动下载并将其添加到环境路径或项目
\bin
文件夹 - Mac/OSX:下载并编译或
brew install aria2
- 环境
- 此插件使用
exec()
在CLI上运行外部下载工具。在禁用了exec
(在php.ini
的disabled_functions
中)的共享托管环境中无法工作。
- 此插件使用
安装和使用
-
您可以将此插件安装在一个项目或全局范围内。
-
执行Composer时使用
--prefer-dist
,例如php composer.phar install --prefer-dist
。
单个项目的安装
- 将包依赖
jakoch/composer-fastfetch
添加到require部分的顶部。
{
"require": {
"jakoch/composer-fastfetch": "*",
"vendor/package-A": "1.0.0",
"vendor/package-B": "2.0.0"
}
}
多个项目的安装(全局安装)
安装
$ composer global require jakoch/composer-fastfetch
卸载
$ composer global remove jakoch/composer-fastfetch
这是如何工作的?
FastFetch是一个用于快速并行将包下载到您的缓存的Composer插件。
概念上,插件实现了一个简单的缓存预热策略。
当Composer达到安装步骤时,它将首先下载此插件。插件将生成一个包含包下载URL的列表。然后它将shell-executes一个下载工具。首选的下载工具是"aria2"。您可能也听说过它是apt-fast背后的工具。(将来也可能支持其他工具如"curl"、"wget"。请发送PR。)
下载工具将所有包直接检索到Composer的缓存文件夹。当Composer继续进行并达到下一个包的"install/download"事件时,它将跳过下载并使用缓存的文件进行安装。
插件的工作流程
这是执行流程的粗略概述
- Composer初始化
- 您执行
composer install --prefer-dist
- Composer希望将您的依赖项解析为稳定的集合。
- 此稳定集合包含所有包的dist URL。
- 您执行
- Composer下载步骤
- Composer开始下载包。
- 第一个下载的包是"composer-fastfetch"插件。
- 插件在下载后自动启动。
- FastFetch插件
- 检测环境中的下载工具和初始化命令包装类
- 构建下载列表
- (将DistUrls数组转换为包含下载URL的文件)
- 运行下载工具
- (处理"downloads"文件并将每个文件下载到缓存文件夹)
- 外部下载工具已检索文件。全部完成。退出插件。
- 回到Composer下载步骤
- Composer仍然处于下载步骤并正常进行。它尝试下载下一个依赖项/包,但跳过每个依赖项,因为所有文件都已存在于Composer缓存文件夹中。
- Composer安装步骤
- Composer将从缓存中提取包到供应商文件夹。
为什么?
此插件的主要原因是Composer逐个下载所有文件(顺序下载)。这适用于包元数据(packagist.org)和所有包下载(dists)。下载是有效的,但整体速度和下载体验并不理想。
并行化元数据检索很复杂,因为Composer没有公开事件(如“onBeforeMetadataRetrieval”或类似事件),并且内部API是受保护的。目前,无法并行化元数据检索。
但是,Composer提供了一个事件“onPostDependenciesSolving”,这意味着解算器已经完成了它的脏活,并确定了一套稳定的包集合。这个集合可能包含包的下载URL,这允许将它们转发给并行下载器。
Aria会与一个或多个服务器建立多个连接,并在可能的情况下重用连接。文件不是顺序下载,而是并行下载。
总的来说,这可能会导致下载速度略有提高,并改善下载体验。