jakoch/composer-fastfetch

Fastfetch - 一个将包下载到缓存的Composer插件。

安装: 465

依赖者: 0

建议者: 0

安全: 0

星标: 13

关注者: 4

分支: 1

开放问题: 3

类型:composer-plugin

dev-master 2016-01-13 00:22 UTC

This package is auto-updated.

Last update: 2024-09-05 18:15:51 UTC


README

Composer插件FastFetch快速并行地将包下载到您的Composer缓存中。

Total Downloads Latest Stable Version Build Status Scrutinizer Code Quality Code Coverage

要求

  • 外部下载工具 - 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.inidisabled_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会与一个或多个服务器建立多个连接,并在可能的情况下重用连接。文件不是顺序下载,而是并行下载。

总的来说,这可能会导致下载速度略有提高,并改善下载体验。