Přidání balíčku do Composeru bez Packagist

(publikováno 16.10.2018) PHP

Composer umožňuje přidat balíček, který není zveřejněn na Packagist. Stačí, aby byl ve veřejném či privátním git repozitáři, dostupný lokálně na serveru v jiné složce nebo jako zip uložen někde online. Ideální způsob, jak balíčky testovat při vývoji.

Přidání balíčku do Composeru bez Packagist

Když jsem chtěl publikovat na Packagist vlastní validační pravidlo PasswordRule pro Laravel, potřeboval jsem otestovat správnou funkčnost Package discovery. Nechtělo se mi ale každou sebemenší změnu dávat na git kvůli testování. Naštěstí to není potřeba, balíčky do Composeru lze přidat i jinak, než přes git a Packagist.

Článek nepřímo navazuje na dřívější články Composer - řešení závislostí a Publikace na Packagist.

Repositories v composer.json

Composer v základu používá pouze 1 repozitář, ve kterém hledá všechny balíčky a tím je Packagist. Nic ale nebrání přidat další repozitáře, i podporovaných protokolů je více. Základní je samozřejmě git, při nainstalovaném Mercurialu nebo SVN lze použít i tyto systémy. Podporuje ale také lokální cestu nebo URL adresu pro stahování.

Hlavní výhoda při určení vlastních repozitářů je ta, že lze, i jen dočasně, použít vlastní verzi již existující knihovny. V kódu níže je stažena knihovna Monolog z vlastního git repozitáře. Po odstranění repositories atributu se opět balíček stáhne z Packagistu. Pro aplikaci takové změny je zapotřebí spustit update daného balíčku: composer update monolog/monolog.

{
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/myOwnGithubAccount/monolog"
        }
    ],
    "require": {
        "monolog/monolog": "dev-bugfix"
    }
}

Type: path - lokální balíček

Pokud balíček není ještě ani na gitu, lze jej do projektu přidat pomocí absolutní nebo relativní cesty. Tuto metodu jsem použil také já. Nejlepší je, že Composer se pokusí vytvořit symbolický odkaz, takže při úpravě balíčku se změny okamžitě projeví všude a není potřeba provádět composer update. Při první změně composer.json souboru je ale opět nutné spustit update tak, aby composer vytvořil požadovaný symbolický odkaz: composer update arxeiss/passwordrule.

{
    "repositories": [
        {
            "type": "path",
            "url": "../PasswordRule"
        }
    ],
    "require": {
        "arxeiss/passwordrule": "*"
    }
}

Type: package - instalace neexistujícího balíčku

Někdy jen je potřeba přidat do projektu zdrojové kódy, které nemají svůj composer.json soubor a tím pádem nejsou reálným balíčkem. I na toto je myšleno a lze vytvořit balíček virtuální, který stáhne data z URL adresy případně CVS.

{
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "nick/package",
                "version": "1.2.7",
                "dist": {
                    "url": "https://www.kutac.cz/MyNickPackage.zip",
                    "type": "zip"
                },
                "autoload": {
                    "classmap": ["libs/"]
                }
            }
        }
    ],
    "require": {
        "nick/package": "^1.0"
    }
}

Jak na privátní repozitáře a další možnosti

Možností co lze dělat za kouzla je samozřejmě více. Nejdůležitější může být přístup do privátních a zaheslovaných git repozitářů. Kompletní seznam funkcionalit je popsán v oficiální dokumentaci Composeru.


Používáte Composer jinak, než je zde napsáno? Podělte se v komentářích o zkušenosti

K tomuto článku již není možné přidávat další komentáře