Venne\Packages – opravdu jednoduché řešení balíčků
- pepakriz
- Člen | 246
Zdravím,
představuji projekt Venne\Packages, který si klade za cíl poskytnout automatickou aktivaci závislostí co možná nejjednodušším způsobem. Co tedy přesně za Vás vyřeší?
- automatickou aktivaci balíčků – například registrací extenze do konfigurace a přidání nezbytných konfiguračních voleb
- publikaci konkrétního adresáře do cesty %wwwDir%
- doplní podporu speciální zavináčové syntaxe – viz dále
Instalace
Balíček Venne\Packages
můžete používat buď jako
samostatný balíčkovací systém, nebo ho přímo integrovat do projektu:
composer require venne/packages:@dev // as a dependency
# composer create-project venne/packages:@dev // aside from the project
Abyste nemuseli po každé změně závislostí v composeru ručně instalovat/odinstalovávat balíčky, můžete si proces zautomatizovat pomocí composer scriptů:
{
"scripts": {
"post-install-cmd": [
"vendor/bin/package-manager sync --composer"
],
"post-update-cmd": [
"vendor/bin/package-manager sync --composer"
]
}
}
Nyní, když nainstalujete novou závislost pomocí composeru, balíček se automaticky zaktivuje.
Packages
Balíčkem se rozumí každý samostatný repozitář, který se dá
nainstalovat pomocí composeru. Pokud je tedy vaše knihovna úspěšně
zaregistrovaná na packagistu, máte hotový i balíček pro
Venne\Packages
;)
Metadata
Svůj balíček můžete obohatit o nepovinná metadata:
- relativePublicPath: relativní cesta k adresáři, který se má nasdílet do %wwwDir%
- configuration: pole konfigurace, které se přidá do hlavního config.neon souboru.
- installers: pole tříd implementující rozhraní Venne\Packages\IInstaller. Můžete si tak dopsat vlastní proces instalace/odinstalace
Kde metadata definovat?
Existují tři možnosti:
1) V souboru composer.json
{
"extra": {
"venne": {
"relativePublicPath": "/Resources/public",
"configuration": {
"extensions": {
"translation": "Kdyby\\Translation\\DI\\TranslationExtension"
}
},
"installers": [
"Namespace\MyInstaller"
]
}
}
}
2) V souboru .venne.php
V souboru nadefinujete třídu implementující rozhraní Venne\Packages\IPackage:
<?php
namespace MyProject;
class Package extends \Venne\Packages\Package {}
2) V samostatném repozitáři venne/packages-metadata
Repozitář stačí forknout a poslat pull s Vaším balíčkem.
Vlastní repozitář metadat
U privátních projektů se může hodit nadefinovat jiný zdroj než výchozí z Venne/packages-metadata. V konfiguraci .venne.packages/config.neon upravte zdroje za vlastní adresy.
Další funkce
Když použijete Venne\Packages jako závislost do Vašeho projektu, můžete využít několik služeb, které balíček poskytuje:
Služba Venne\Packages\PathResolver
Tato služba poskytuje překlad cest ze speciální zavináčové syntaxe na
regulérní cestu. Za zavináčem následuje jméno balíčku a následně
relativní cestu ke konkrétnímu souboru. Místo
lomítka v názvu balíčku použijte tečku.
$pathResolver = $container->getByType('Venne\Packages\PathResolver');
echo $pathResolver->expandPath('@my.package/foo/bar'); // /path_to_my_package/foo/bar
echo $pathResolver->expandResource('@my.package/foo/bar'); // {$resourcesDir}/my/package/foo/bar
Vylepšená makra
Některá makra nyní umožňují zadávat cestu syntaxí pro pathResolver:
{path @my.package/file} // browser_path_to_my.package/file
{extends @my.package/@layout.latte} // extends from other package
{includeblock @my.package/@layout.latte} // include blocks from template
Package-manager
Script package-manager můžete používat i manuálně. Zde je použití:
vendor/bin/package-manager list # List packages
vendor/bin/package-manager sync # Synchronize all packages with filesystem
vendor/bin/package-manager install <name> # Install package
vendor/bin/package-manager uninstall <name> # Uninstall package
Závěrem ukázka instalace a aktivace Doctrine v Nette pomocí Venne\Packages:
- composer require kdyby/doctrine
- hotovo
Budu rád za jakékoliv připomínky a návrhy.
Editoval pepakriz (30. 3. 2014 10:03)
- Filip Procházka
- Moderator | 4668
Líbí se mi že jsi nakonec vyřešil ty metadata bez nutnosti je commitovat do konkrétního balíčku :)
- pepakriz
- Člen | 246
enumag: Zatím ne, ale přidat pro to podporu nebude takový problém – https://github.com/…ges/issues/1.