Composer – Nette by se mělo stát balíčkem

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Filip Procházka
Moderator | 4668
+
0
-

Studoval jsem jaké balíčkovací systémy v PHP fungují a našel jsem jenom pear a pár nedodělaných. Pear je celý takový tfuj. Mám z něj hrůzu a používat ho nechci na nic jiného, než instalaci phpunit.

Co se mi ale velice zalíbilo tak je Composer http://getcomposer.org/. Pro okamžité okouzlení stačí přečíst dokumentaci.

Jak by to mohlo vypadat?

  • Nette jako balíček na http://packagist.org/
  • všechny doplňky pro Nette jako balíčky třeba na https://packages.nette.org/
  • v distribučním balíčku Nette bude soubor composer.json, který bude obsahovat repozitář na nette.org, aby se daly pohodlně instalovat doplňky

Výhody?

  • automatické řešení závislostí ⇒ odpadne „Pro jakou verzi je doplněk?“
  • pohodlná instalace ⇒ odpadne „Kam mám ten soubor nahrát?“

Vize

Nette se rozdělí na jednotlivé komponenty a bude možné instalovat Latte, Neon, Laděnku, … jako samostatné balíčky do aplikace a Composer by to mohl hodně usnadnit.

Mám posílat pull se souborem composer.json, aby z Nette byl balíček? Co si o tom myslíš, Davide? Ptám se hlavně proto, že by se dal udělat i repozitář přímo na webu (pomocí jednoho souboru package.json), kde by bylo všechno ohledně frameworku a nemuselo by se nic měnit. Dalo by se díky tomu rozlišovat mezi jednotlivými verzemi lépe (php5.2, 5.3, …)

PS: Composer umí pracovat i s pearem.

Editoval HosipLan (7. 3. 2012 16:05)

Lopo
Člen | 277
+
0
-

ono by to chcelo hlavne aby to podporovali projekty ako Doctrine, Symfony a pod. … bez toho je to take … no … jako by som to …

Filip Procházka
Moderator | 4668
+
0
-

No jak bych to… symfony doctrine

http://packagist.org/ je hlavní repozitář a není tam toho málo ;)

Lopo
Člen | 277
+
0
-

HosipLan napsal(a):

No jak bych to… symfony doctrine

http://packagist.org/ je hlavní repozitář a není tam toho málo ;)

hmm … tak to potom jo … ja som sa pozrel do zdrojakov tych veci na githube a nikde som tam nezbadal ten .json subor … tak potom som nic nepov… eee .. nenapisal :)

Panda
Člen | 569
+
0
-

Doplňky jako balíčky „komposéru“ (či jiného balíčkovače) by byly sice hezká věc, ale bohužel dokud jsou addons jen jako stránka na wikině, tak je něco takového jen pouhé zbožné přání.

Nosím v hlavě už nějaký čas myšlenku, co by s tím šlo udělat a jak celé doplňky trochu unifikovat… Pokud bude příští Poslední sobota v rozumné dojezdové vzdálenosti od Plzně (= v Praze) a nic mi do toho nevleze, tak bych si rád připravil nějaký návrh + jeho prezentaci a trošku zburcoval komunitu. :-)

Filip Procházka
Moderator | 4668
+
0
-

@**Panda**: Unifikovat právě není vůbec potřeba. Stačí dodržovat PSR-0 a přidat 1 soubor :) Nebo ani to ne a jenom si někde extra uložit informaci o balíčku.

Tohle by samozřejmě vyžadovalo zásah od Davida.

hason
Člen | 23
+
0
-

@HosipLan: Po přijetí https://github.com/…ser/pull/387 nebude potřeba dodržovat PSR-0. Půjde použít „Robot Loader“ ze Symfony.

Editoval hason (8. 3. 2012 9:43)

Filip Procházka
Moderator | 4668
+
0
-

@**hason**: Ještě by to chtělo autoloading fileloader (nebo tak něco), kam by se napsal soubor Nette/loader.php a ono to dál neřešilo :) (jeho volání by se pak přidalo do .composer/autoload.php)

Editoval HosipLan (8. 3. 2012 9:57)

Panda
Člen | 569
+
0
-

HosipLan napsal(a):

@**Panda**: Unifikovat právě není vůbec potřeba. Stačí dodržovat PSR-0 a přidat 1 soubor :) Nebo ani to ne a jenom si někde extra uložit informaci o balíčku.

Tohle by samozřejmě vyžadovalo zásah od Davida.

Nevím, jestli jsme se pochopili, myslel jsem tyto doplňky: https://addons.nette.org/

Právě u nich by udržování informací o balíčcích a závislostech mohl být trochu problém, některé doplňky jsou často „chcíplé“ a neudržované (včetně těch mých, samozřejmě :-) ). Proto myslím, že by to chtělo koncept addons trošku předělat, malinko víc zkomunitnit a při té příležitosti maximálně ulehčit balíčkování typu Composer. Myslím, že právě čerstvé Nette 2.0 by mohl být dobrý čas, kdy ekosystém doplňků trochu nakopnout a předělat. A právě o tom bych si rád popovídal na PS.

Samozřejmě všechny změny by měly vycházet z komunity, tzn. s minimem práce ze strany Davida. Ale to už jsem docela off-topic. :-)

Filip Procházka
Moderator | 4668
+
0
-

Ano rozumíme si :) Jenom nevím, jak to chceš udělat bez Davida. Addony do Nette (které jinde fungovat nebudou) by měly být na doméně https://nette.org. Od toho je Packagist opensource, aby se daly vytvářet snadno vlastní repozitáře.

A ano, je to perfektní téma na Posobotu (další má být v Praze, ne? Mohl by být zase Hub :)

Editoval HosipLan (8. 3. 2012 10:13)

Panda
Člen | 569
+
0
-

Tak samozřejmě, že úplně bez Davida to nepůjde, ale určitě by se mohlo najít nějaké řešení, kdy by to komunita vyvinula, otestovala a David jen provedl deploy, případně by to běželo někde kousek bokem a David to jen nasměroval. Ale to je pak věc dohody a nechal bych to na tu PS. :-)

hrach
Člen | 1834
+
0
-

Ohledne addonu: spis bych se vydal smerem http://nette.merxes.cz/

Jan Jakeš
Člen | 177
+
0
-

Souhlasím, že s addony k Nette je nutné něco udělat!

Měl jsem takovou představu, že by se vše řešilo přes konfigurační soubory neon (že by třeba každá komponenta měla svůj), ale ten Composer asi taky dává smysl. Vidím tu ale jeden zásadní problém – pro kvalitní řešení addonů je podle mě nutné nějak řešit assets. Tím nechci cpát do Nette knihovny jako Assetic, ale aspoň jědnoduchou třídu, která by zkopírovala assets komponenty do nějaké www cache. Ideální by bylo řešit také nějaké závislosti – tedy něco, co ovlivní pořadí načtení jednotlivých CSS a JS souborů.

Podle mě je naprosto nutné dosáhnout stavu, kdy komponentu přidám např. jediným řádkem v konfigu. Žádné přidávání JS, CSS a dalších věcí do hlavičky.

Inspirací by zde mohlo být Symfony a jejich bundles, ale myslím, že to jde řešit lépe :)

Editoval Juan (8. 3. 2012 10:59)

Filip Procházka
Moderator | 4668
+
0
-

@**Juan**: To by měl řešit WebLoader, nebo můj port Asseticu a symfony balíčků (ukázka + použití)

Nox
Člen | 378
+
0
-

@**hrach** jak se to liší od https://addons.nette.org/ ? Výpis i detaily addonu mi přijdou skoro identické

hrach
Člen | 1834
+
0
-

Např. tak, že ti generuje verzi pro všechny tři verze Nette.

chemix
Nette Core | 1294
+
0
-

Pěkně řešené addons maji MooTools : http://mootools.net/forge/

Regnete se přes twitter, vytvoreni addonu je otazka zadani github cesty … zbytek uz je na php ktere parsuje manifest file ve kterem jsou idealne definované závislosti verze a jiné věci

ukazka : http://www.cilichili.cz/…im-232.shtml

detail pak vypada třeba takto : http://mootools.net/…e/p/mif_tree

Jan Jakeš
Člen | 177
+
0
-

@HosipLan: Jo, něco takového, jako máš v Kdyby. Jde mi ale o to, že nějaký standard addonů a základní řešení assets by mělo definovat Nette. To je cesta k sjednocení addonů.

hason
Člen | 23
+
0
-

@HosipLan: Na Kdyby je hodně práce, ale nebylo by jednodušší udělat NetteBundle místo kopírování celého ekosystému Symfony?

David Grudl
Nette Core | 8082
+
0
-

Mám posílat pull se souborem composer.json, aby z Nette byl balíček? Co si o tom myslíš, Davide?

Jsem pro, ale patří to asi spíš sem, než do kódu frameworku, ne?

Ad Nette addons: tohle je potřeba poměrně rychle pořešit. Současné řešení je děsné, protože je komplikované pro autory doplňků. (Na druhou stranu, podobně to mělo řešení jQuery a vzniku doplňků to tolik nebránilo). Mootools s jejich autogenerováním z Githubu se mi líbí velmi, protože Github se stává pomalu standard (byť běží na děravých Rails ;).

hason
Člen | 23
+
0
-

A právě napojení na GitHub má Packagist http://packagist.org/about Automaticky vytváří verze podle tagů a větví repozitáře např. http://packagist.org/…doctrine/orm. Stačí se jen svészt na tom, co už vývojáři Symfony vytvořili.

Editoval hason (8. 3. 2012 20:42)

David Grudl
Nette Core | 8082
+
0
-

hason napsal(a):

A právě napojení na GitHub má Packagist http://packagist.org/about

To je dobrá zpráva. Jestli to dobře chápu, Composer je nástroj a Packagist (jediný nebo primární) repozitář?

Filip Procházka
Moderator | 4668
+
0
-

David Grudl napsal(a):

Composer je nástroj

ano

Packagist (jediný nebo primární) repozitář?

Primární, ale jde vytvářet a přidávat vlastní.

Jsem pro, ale patří to asi spíš sem, než do kódu frameworku, ne?

A přesně to je ve zbytku toho odstavce :)

HosipLan:

Ptám se hlavně proto, že by se dal udělat i repozitář přímo na webu (pomocí jednoho souboru package.json), kde by bylo všechno ohledně frameworku a nemuselo by se nic měnit. Dalo by se díky tomu rozlišovat mezi jednotlivými verzemi lépe (php5.2, 5.3, …)

Composer počítá i s generovanými balíky.


hason napsal(a):

Na Kdyby je hodně práce, ale nebylo by jednodušší udělat NetteBundle místo kopírování celého ekosystému Symfony?

Celý ekosystém nekopíruji, „jen“ pár věcí. Ale to je na jinou debatu :)

Editoval HosipLan (8. 3. 2012 16:07)

David Grudl
Nette Core | 8082
+
0
-

Zhostí se někdo tohohle úkolu?

Filip Procházka
Moderator | 4668
+
0
-

Když mi řekneš, jak si to představuješ, tak se pokusím realizovat, co bude v mých silách.

David Grudl
Nette Core | 8082
+
0
-

Nepřemýšlel jsem nad tím a bylo by fajn, kdybych ani nemusel ;-)

Filip Procházka
Moderator | 4668
+
0
-

Davide, bylo by super kdybych dostal feedback alespoň k tomuto shrnutí, jestli to tak může být. Snažil jsem se psát tak, aby tě to nenutilo moc přemýšlet ;)

Fáze první

nette/nette

Git musí obsah soubor composer.json pull

Composer umí pracovat s větvemi a tagy a ze všech vytváří verze, které je možné nainstalovat. Tedy jakoukoliv větev, nebo tag v gitu, si můžu nastavit jako závislost. Má to ovšem podmínku, že daná větev, nebo tag, musí v checkoutu obsahovat validní soubor composer.json.

Tedy doporučuji po mergnutí pull requestu vytvořit tag v2.0.2, aby se na něj dalo odkazovat.

nette/sandbox

Bude obsahovat hloupoučký composer.json, který bude deklarovat závislost na nette/nette.

Workflow:

  • naklonuji si nette/sandbox
  • v jeho složce zavolám $ composer install a automaticky mi nainstaluje nette/nette
  • po doplnění dalších závislostí zavolám $ composer update atd

TODO: poslat pull

Fáze druhá

Vytvoří se soubor packages.json zde na webu a při každém deployi se bude aktualizovat. http://packagist.org jej každou hodinu stáhne a aktualizuje si informace o balíčcích.

Základ mám hotový, ale je třeba upravit build-tools a s těmi se teprve budu seznamovat.

Fáze třetí

Přidat Nette Framework na http://packagist.org

Editoval HosipLan (16. 3. 2012 11:30)

Patrik Votoček
Člen | 2221
+
0
-

Pokud chcete Nette používat v Composeru už dnes:

{
	"repositories": [
		{
			"type": "pear",
			"url": "https://pear.nette.org"
		}
	],
	"require": {
		"pear-nette/Nette": "2.0.1"
	}
}
require_once "vendor/pear-nette/Nette/Nette/loader.php"; // zdvojení Nette je správně
Patrik Votoček
Člen | 2221
+
0
-

to je divně nemáš někde něco blbě? používám to tady https://github.com/…omposer.json a funguje to bezproblémů…

Honza Marek
Člen | 1664
+
0
-

HosipLan: Nechápu fázi 2 a 3. Jakou výhodu přinese packages.json na webu? Nezpůsobí to jen nutnost definovat v composer.json speciální repozitář pro Nette, tedy komplikaci? Podle mě by stačilo dát do repozitáře ten composer.json a zaregistrovat nettí github do Pakážisty.

btw Je vůbec Kompozér kompatibilní s PHP < 5.3, aby mělo smysl připravovat více balíčků Nette?

Honza Marek
Člen | 1664
+
0
-

Na Nette v Kompozéru se moc těším. Je to mnohem lepší než shánění knihoven po všech čertech.

Pokud to chápu správně, dělat nějaký speciální repozitář na doplňky mi přijde zbytečné. Kdyby se soubory composer.json generovaly nějak automaticky pro všechny věci z addons.nette.org, nešlo by beztak zaručit kompatibilitu, takže by to bylo spíš kontraproduktivní.

Pokud se stane kompózování běžnou praktikou, bude jednodušší sepsat nějaké stručné info a případně pomoct autorům ověřených doplňků formou pull requestů s composer.json. Registrace na pakážistovi je pak otázkou minuty.

Filip Procházka
Moderator | 4668
+
0
-

Honza má bohužel pravdu, Composer na menší než 5.3.2 nefunguje :(

Teď je tedy otázka, má smysl se snažit dostat tam rovnou i ty další balíčky? Já myslím, že minimálně laděnka a neon by si to zasloužili.

Honza Marek
Člen | 1664
+
0
-

A taky dibi, Texy, …

Filip Procházka
Moderator | 4668
+
0
-

Tak mě napadá, udělat to na 2×.. ono se to nepo… Tedy teď nahodit na http://packagist.org alespoň Nette a pak přidávat buildnuté balíčky přes packages.json.

Davide, pokud se zaregistruješ na http://packagist.org, tak ti přidám/předám maintainera.

Přidal jsem prozatím alespoň github http://packagist.org/packages/nette/

// update: paráda, funguje. Dostupné verze pro závislosti jsou dev-master a jeho alias 2.1-dev. S dalším tagem automaticky přibude verze.

// OT: kamaráda napadl pěkný vtípek „do replaces si mel dat Symfony 2, Zend Framework…“ :D

Editoval HosipLan (19. 3. 2012 8:45)

hrach
Člen | 1834
+
0
-

Nevidim duvod, proc je v tagech dbal?

David Grudl
Nette Core | 8082
+
0
-

Honza Marek napsal(a):

Pokud to chápu správně, dělat nějaký speciální repozitář na doplňky mi přijde zbytečné.

To rozhodně.

Kdyby se soubory composer.json generovaly nějak automaticky pro všechny věci z addons.nette.org, nešlo by beztak zaručit kompatibilitu, takže by to bylo spíš kontraproduktivní.

Nějaký generátor by ale nebyl špatný, aby měl autor pluginu jednodušší práci.

HosipLan napsal(a):

Teď je tedy otázka, má smysl se snažit dostat tam rovnou i ty další balíčky? Já myslím, že minimálně laděnka a neon by si to zasloužili.

Klidně to zkus, alespoň se ukáže, kde to drhne.

Davide, pokud se zaregistruješ na http://packagist.org, tak ti přidám/předám maintainera.

Jsem tam jako david@grudl.com

Filip Procházka
Moderator | 4668
+
0
-

@**hrach**: dibi je taky dbal, ne? A Nette\Database je taky (trochu) dbal, ne? Spíš tam je těch tagů málo, ale zase jsem si to nechtěl cucat z paty.

Stačí upravit ten json v repozitáři, na http://packagist.org se to obnoví samo.


@**David Grudl**: co nejdřív na to kouknu a sepíšu i info do docky.

Editoval HosipLan (19. 3. 2012 14:16)

Honza Marek
Člen | 1664
+
0
-

David Grudl napsal(a):

Nějaký generátor by ale nebyl špatný, aby měl autor pluginu jednodušší práci.

Composer má svůj scaffolding php composer.phar init. Umělo by to něco navíc?

Davide, na pakážistovi by se mi líbily i knihovny texy a dibi. Mám posílat pull requesty s composer.jsonama, že bys to potom naklikal do nějakého DavidGrudl/Texy apod?

David Grudl
Nette Core | 8082
+
0
-

Honza Marek napsal(a):

Bud rád.

hrach
Člen | 1834
+
0
-

@HosipLan Dbal je bohužel název, který je jasně spojen s doctrine. Stačí si to rozkliknout a vidíš, že to tak je opravdu celkem chápano. Zkusil bych něco univerzálnějšího.

David Grudl
Nette Core | 8082
+
0
-

Nezaměňoval bych DBAL a Doctrine DBAL.

Filip Procházka
Moderator | 4668
+
0
-

Já naopak uvažoval, že bych přitvrdil a přidal tam ještě tag active-record :)