Composer自定义发布包

时间:2017-04-13 09:43:44

标签: php github composer-php release

我有一个GIT存储库,可以创建可以通过Composer下载和安装的版本。

这些版本目前创建包含整个存储库的tarball。问题是存储库很大,我不需要全部内容。

除此之外,还有一个构建过程可以编译,合并等,并提供更小的包。

我想要的是上传来自构建过程的存档,并在编辑要求时将该包作为下载提供。

就目前而言,我不认为这是一种选择。即使我上传自定义archive.tar.gz作曲家仍然下载来自GIT标签的原始tarball文件(包含每个文件的巨大tarball)。

这个问题有解决办法吗?

4 个答案:

答案 0 :(得分:0)

创建自己的bash或shell脚本,完成所有脏工作。你应该在安装过程中通过composer触发你的bash脚本。 在脚本中包含,包安装,zip存档和通过SCP命令上传。这将为你做所有的事情。请务必在您的自述安装说明中提及,用户需要使用sudo权限或管理员权限运行composer install。

以下是一些参考使用shell脚本的链接

https://getcomposer.org/doc/articles/scripts.md

https://edmondscommerce.github.io/composer/composer-run-utility-bash-script.html

答案 1 :(得分:0)

我相信你要找的是将你的composer.json设置为使用dist代替auto preferred-install

https://getcomposer.org/doc/06-config.md#preferred-install

然后,您可以在github中使用相应的标记创建一个新版本,并在那里上传二进制文件。

PS:我没有对此进行过测试,但它似乎应该有效。

答案 2 :(得分:0)

添加到composer.json

"repositories": [
      {
        "type": "path",
        "url": "./laravel-package-name"
      }
 ],

使用项目文件夹中的代码创建新文件夹 laravel-package-name

答案 3 :(得分:0)

我最终创建了php类来处理Composer抛出的pre-package-install事件。

<?php

namespace Company\Composer;

use Composer\Installer\PackageEvent;

require_once(__DIR__ . "/../../../vendor/autoload.php");

class EventHandler
{
    public static function prePackageInstall(PackageEvent $event)
    {
        $operation = $event->getOperation();
        $package = $operation->getPackage();
        if ($package->getName() !== 'company/repo-name') {
            return;
        }

        $distUrl = 'https://github.com/company/repo-name/releases/download/%s/archive.zip?access_token=%s';
        $package->setDistUrl(sprintf($distUrl, "v" . $package->getFullPrettyVersion(), '[GITHUB-USER-TOKEN]'));
    }
}

如果包在私人仓库上(例如在我的情况下),则需要注意[GITHUB-USER-TOKEN]

composer.json

"pre-package-install": [
            "Company\\Composer\\EventHandler::prePackageInstall"
        ],