eckinox/installer-plugin

一个简单的Composer插件,用于安装包含额外文件和配置的元包。

安装次数: 9,720

依赖者: 1

建议者: 0

安全性: 0

星标: 0

关注者: 2

分支: 0

开放问题: 0

类型:composer-plugin

2.0.2 2022-07-13 18:47 UTC

This package is auto-updated.

Last update: 2024-09-13 23:44:17 UTC


README

CI

一个简单的Composer插件,用于安装(元)包,包含额外文件和配置。

使用方法

要开始使用,只需在项目中通过以下方式引入此插件:

composer require --dev eckinox/installer-plugin

完成上述操作后,您可以使用eckinox-metapackage类型要求任何Composer包。

创建eckinox-metapackage

Eckinox元包与所有常规包相同,只有一个例外:它们可以在根目录中包含一个replicate目录。

每当安装此类类型的包时,该包的replicate目录中的每个文件和目录都将原样复制到项目目录中。

如果replicate目录中已存在项目中的目录,则其文件将简单地追加到现有目录中。原始文件不会被删除。
但是,如果项目中的现有文件与包的replicate目录中的另一个文件同名,则会覆盖项目中的现有文件。

通过处理器添加自定义逻辑

如果您需要在复制过程中添加额外的逻辑和处理,您可以在包中创建一个处理器类。

处理器类扩展Eckinox\Composer\HandlerInterface,必须在包的composer.json文件中声明如下

    ...
    "extra": {
        "class": "Eckinox\\PackageName\\YourHandler"
    },
    ...

您的处理器类必须定义以下方法

  • postFileCreationCallback:定义文件首次在根项目中创建后会发生什么。
  • handleExistingFile:定义要复制的文件在根项目中已存在时会发生什么。

以下是一个非常基本的处理器类示例,它在主项目中首次复制时将rename-me.txt文件重命名为renamed.txt

<?php

namespace Eckinox\Composer\Tests\MockPackage;

use Composer\IO\IOInterface;
use Composer\Package\PackageInterface;
use Composer\Util\Filesystem;
use Eckinox\Composer\HandlerInterface;

class ReplicationHandler implements HandlerInterface
{
    public function __construct(
        private PackageInterface $package, 
        private Filesystem $filesystem, 
        private IOInterface $io)
    {
    }

    public function handleExistingFile(string $packageFilename, string $projectFilename, ?string $currentlyInstalledFilename = null)
    {
    }

    public function postFileCreationCallback(string $projectFilename)
    {
        if (basename($projectFilename) == "rename-me.txt") {
            $newFilename = substr($projectFilename, 0, strlen($projectFilename) - 13) . "renamed.txt";
            rename($projectFilename, $newFilename);
        }
    }
}

测试

为了测试此插件,请确保已安装所有依赖项,并运行:

composer test

测试用例位于tests/目录中,并由PHPUnit执行。