Jak se verzuje Nette v době postmonolitické?

před 13 dny od David Grudl     edit

Ačkoliv Nette původně vzniklo jako monolit, tedy jedna velká knihovna, v roce 2014 se rozdělilo do 20 nezávislých knihoven. Mohlo se tak stát díky nástupu Composeru. Z toho kroku uživatelé stále více profitují. Řada komponent se dnes používá zcela samostatně a někteří programátoři ani netuší, že jde o součást frameworku. Příkladem může být třeba generátor PHP kódu Nette PhpGenerator nebo pošťák Nette Mail. A samozřejmě sem patří zásadní knihovny jako Latte a Tracy.

Každý ve svém domečku

Dnes má každá knihovna svůj vlastní repozitář, issue tracker, pull requesty, release notes atd. Jde o přirozený stav, jako weby sídlí na vlastní doméně nebo pro každý projekt máte na disku vlastní adresář. Naopak tracker, ve kterém se míchají issues týkající se kupříkladu vývoje CSS preprocesoru s psaním dokumentace JSON parseru, a to jen proto, že oba projekty kdysi založil stejný programátor, představuje esenci nepoužitelnosti jak pro uživatele, tak pro vývojáře.

A také má každá knihovna svůj vlastní životní cyklus. Jsou knihovny, které žijí velmi aktivně (v roce 2020 vyšly 4 zásadní verze Latte), ale také knihovny hotové, které se prakticky už jen aktualizují pro nové verze PHP (např. RobotLoader). To je opět přirozený stav věcí.

Naopak by bylo násilné životní cykly spojovat. S každou verzí některé z knihoven Nette otagovat novou verzi u zmíněného RobotLoaderu. Časem by vznikly „velké“ verze RobotLoaderu, které by se od sebe nelišily ani komitem. Bylo by to nejen proti zdravému rozumu, ale také proti smyslu verzování. Antisemantické verzování.

Spravovat různé knihovny v jednom repozitáři s jedním issues trackerem a verzováním je jako vařit několik různých jídel v jednom hrnci.

Společná linie

Svobodná existence jednotlivých knihoven znamená, že neexistuje jedna společná verze. Nejnovější PhpGenerator nese číslo 3.5, zatímco nové Nette Schema teprve 1.1. Co potom vlastně znamená, že vyšla nová verze Nette? A jak na takovou verzi aktualizovat?

Knihovnou, která má v Nette výsadní postavení, je Nette Application. Pokud řeknete, že používáte Nette Framework, myslíte tím primárně používání presenterů a tedy Application. A když nyní vyšla její verze 3.1, hovoříme také o vydání Nette 3.1. Které samozřejmě zahrnuje volitelné ostatní kompatibilní balíčky, které ale pochopitelně mají různé verze. To, že jsou spolu kompatibilní, není dáno stejným číslem verze, ale parametry v souborech composer.json.

U softwarových balíků, kde chybí hegemonní knihovna, lze používat letopočet. Dělá to tak třeba Adobe. Takže Adobe Creative Cloud 2021 zahrnuje Photoshop 22, Illustrator 25, Premiere Pro 14.7 atd. Pokud jsem uživatelem konkrétního produktu, samozřejmě sleduji jeho vlastní vývoj a verzování, pokud používám celý balík, jednotlivé verze přestávají hrát roli. Stejně tak se na to dá dívat v případě Nette.

Jak instalovat aktualizace?

Verze uvedené v souboru composer.json zaktualizujete na nejnovější pomocí příkazu composer require. A nemusíte vůbec pátrat po číslech.

Pokud používáte metabalík nette/nette, pomocí composer require nette/nette zaktualizujete verzi v composer.json na ^3.1 a nainstalují se všechny další knihovny. Pokud máte v Composeru výčet jednotlivých balíčků, což je asi častější případ, je potřeba je všechny uvést v příkazovém řádku:

composer require nette/application nette/bootstrap nette/forms latte/latte tracy/tracy ...

Což je poněkud nepraktické. Než na to bude mít Composer příkaz, použijte jednoduchý skript Composer Frontline, který to udělá za vás:

php composer-frontline.php

Dokonce jej můžete použít k aktualizaci jiných knihoven, když jako parametr předáte masku: composer-frontline.php doctrine/*.

Nová verze Nette 3.1 skutečně právě vyšla, takže velmi brzy očekávejte zajímavé články a návod k migraci.

Komentáře (RSS)

  1. Zrovna jsem nad tím poslední dobou přemýšlel. 👍

    před 12 dny

Chcete-li odeslat komentář, přihlaste se