编辑器自定义发布包



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

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

除此之外,还有一个

编译、合并等构建过程,并提供一个更小的包。

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

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

这个问题有什么解决方案吗?

创建自己的 bash 或 shell 脚本来完成您所有的肮脏工作。 您的 Bash 脚本应在安装期间通过 Composer 触发。在脚本中包含软件包安装、zip 存档和通过 SCP 命令上传。这将为您完成所有工作。请务必在自述文件安装说明中提及,用户需要使用 sudo 权限或管理员权限运行作曲家安装。

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

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

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

我相信

您正在寻找的是将 composer.json 配置为使用 dist 而不是 auto 作为其preferred-install

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

然后,您可以在 github 中使用适当的标签创建一个新版本,并将二进制文件上传到那里。

PS:我还没有测试过这个,但似乎它应该可以工作。

添加到 composer.json

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

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

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

<?php
namespace CompanyComposer;
use ComposerInstallerPackageEvent;
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"
        ],

相关内容

  • 没有找到相关文章

最新更新