Venne\Packages – opravdu jednoduché řešení balíčků

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
pepakriz
Člen | 246
+
0
-

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:

  1. composer require kdyby/doctrine
  2. 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
+
0
-

Líbí se mi že jsi nakonec vyřešil ty metadata bez nutnosti je commitovat do konkrétního balíčku :)

hrach
Člen | 1838
+
0
-

Vypada to hodne zajimave :-)

enumag
Člen | 2118
+
0
-

Vypadá to hezky.

Dotaz: Je možné mít i vlastní balíček podobný venne/packages-metadata?

pepakriz
Člen | 246
+
0
-

enumag: Zatím ne, ale přidat pro to podporu nebude takový problém – https://github.com/…ges/issues/1.

enumag
Člen | 2118
+
0
-

@pepakriz: Bylo by to fajn, zejména pro private packages. ;-)

pepakriz
Člen | 246
+
0
-

enumag: Provedeno. Zdroje se konfigurují v souboru .venne.packages/config.neon