Composer – Nette by se mělo stát balíčkem
- Filip Procházka
- Moderator | 4668
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)
- Filip Procházka
- Moderator | 4668
No jak bych to… symfony doctrine
http://packagist.org/ je hlavní repozitář a není tam toho málo ;)
- Lopo
- Člen | 277
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
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
@**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
@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
@**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
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
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
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. :-)
- Jan Jakeš
- Člen | 177
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
@**Juan**: To by měl řešit WebLoader, nebo můj port Asseticu a symfony balíčků (ukázka + použití)
- Nox
- Člen | 378
@**hrach** jak se to liší od https://addons.nette.org/ ? Výpis i detaily addonu mi přijdou skoro identické
- chemix
- Nette Core | 1310
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
- David Grudl
- Nette Core | 8229
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
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 | 8229
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
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)
- Filip Procházka
- Moderator | 4668
Když mi řekneš, jak si to představuješ, tak se pokusím realizovat, co bude v mých silách.
- Filip Procházka
- Moderator | 4668
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 nainstalujenette/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
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
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
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
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
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.
- Filip Procházka
- Moderator | 4668
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)
- David Grudl
- Nette Core | 8229
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
@**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
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?
- Filip Procházka
- Moderator | 4668
Já naopak uvažoval, že bych přitvrdil a přidal tam ještě tag active-record :)