У меня есть GIT-репозиторий, который создает выпуски, которые можно загрузить и установить через Composer.
Эти выпуски в настоящее время создают архив, содержащий весь репозиторий. Проблема в том, что репозиторий огромен, и мне не нужно все содержимое.
Помимо этого существует процесс сборки, который компилирует, объединяет и т. Д. И предоставляет пакет, который намного меньше.
Я хотел бы загрузить архив, полученный в процессе сборки, и предоставить этот пакет для загрузки, когда его запрашивает композитор.
При нынешних обстоятельствах я не рассматриваю это как вариант. Даже если я загружаю пользовательский архив archive.tar.gz, он все равно загружает оригинальный файл tarball, полученный из тега GIT (тот огромный архив, содержащий каждый отдельный файл).
Есть ли решение этой проблемы?
Создайте свой собственный скрипт bash или shell, который сделает всю вашу грязную работу. Ваш bash-скрипт должен быть запущен во время установки через composer.
Включить, установить пакет, zip-архив и загрузить с помощью команды SCP в вашем скрипте. Это сделает все для вас. Не забудьте упомянуть в своих замечаниях по установке для меня, что пользователь должен запустить установку composer с привилегиями sudo или правами администратора.
Ниже приведены ссылки для использования сценариев оболочки.
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 с вашим кодом в папке проекта
Я закончил создание класса PHP для обработки 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"],