Composer – navod pouzitia v projektoch (nove/stare)
- Tomas P
- Člen | 27
Ahoj,
s composerom som doteraz nepracoval… po precitani navodu https://doc.nette.org/…ces/composer
uz viem o co ide, ake to je super, ako sa daju stahovat balicky, ako
update-ovat balicky a pod. Rozhodne si myslim ze je to krok vpred a rad by som
to zacal pouzivat.
Ale co mi tam chyba je – ako to pouzit v projekte resp ako s tym vytvorit projekt.
Napr moj pripad je:
- mam aplikaciu s nette, pouzivam zopar nette addons
- ako zanecham app/ adresar a zamenim libs/ adresar za composerom managovane adresare
Zaujima ma tiez:
- zacinam novy projekt, je nejak jednoduchsie zacat priamo s nejakym
sandboxom s composerom
- cez „composer create-project nette/sandbox myApp“
- ako to je ked nepouzivam git ale svn (teda nespravim asi git clone)
O tejto moznosti (parameter create-project) som sa docital niekde v readme sandboxu a prvykrat som na to narazil v dokumentoch k Venne, tak som to skusil ale nie je to tam uplne dotiahnute asi (sandbox je uplne prazdny a robi len 404ku, ktovie kam mam napisat vobec routy), nette sandbox zobrazuje titulnu stranku ale neviem ci z toho vychadzat v novom projekte.
Napiste prosim ako pouzivate composer… ci si kazdu aplikaciu vytvorite ako package do composeru (z vlastnej repository – ako?) alebo si spravite ten composer.json a len stahujete dependency.
Editoval Tomas P (16. 10. 2012 15:45)
- Filip Procházka
- Moderator | 4668
Zkus si pro začátek projít tohle a zítra ti zkusím odpověděť obšírněji.
- Tomas P
- Člen | 27
HosipLan napsal(a):
… zítra ti zkusím odpověděť obšírněji.
vdaka, uz sa tesim :-) (no hurry)
medzicasom som nasiel na http://filip-prochazka.com/components/ tvoj zaklad pre projekty hosiplan/project (len tam trebalo zamenit parameter install → create-project).
- Filip Procházka
- Moderator | 4668
Ale co mi tam chyba je – ako to pouzit v projekte resp ako s tym vytvorit projekt.
Máš pravdu, vytvoření projektu zde chybělo. Je to proto, že
create-project
Nette začalo podporovat docela nedávno a
zapomněli jsme na to. Přidal
jsem to, díky za upozornění!
mam aplikaciu s nette, pouzivam zopar nette addons, ako zanecham app/ adresar a zamenim libs/ adresar za composerom managovane adresare
Composer má jako výchozí složku, ve které managuje závislositi
vendor/
, jenomže Nette vždy používalo libs/
,
takže se to v nastavení
přeplo.
Doporučil bych ti tedy vložit do projektu čistý
composer.json
. Našel si rozšíření, které používáš a jsou
na https://packagist.org/
jako balíčky. Poté je do composer.json
přidáš a zavoláš nad
projektem $ composer install
. Tím by se ti měla vytvořit složka
vendor/
a do ní se závislosti nainstalují. Poté přidáš do
app/boostrap.php
tento řádek
require __DIR__ . '/../vendor/autoload.php';
Tenhle řádek můžeš smazat, pokud ho tam někde máš, protože by ti Composer měl Nette načítat sám (samozřejmě ho musíš uvést v závislostech)
require __DIR__ . '/../libs/Nette/loader.php'; // popř varianta s LIBS_DIR
A potom můžeš začít odmazávat ze složky libs/
všechny
závislosti, o které se ti stará Composer. Pro začátek třeba samotné
Nette. A nechal bych si RobotLoader
nasměřovaný na
libs/
, dokud tam budeš mít věci, o které se Composer
nestará.
zacinam novy projekt…
Pokud začínáš nový projekt, tak buď ho chceš založit na Nette a a
použiješ create-project
, nebo chceš čistý projekt a potom ti
stačí založit si nový projekt v tvém IDE, nebo dle tvého uvážení,
v každém případě ale budeš mít někde složku, ve které budou soubory
projektu. Tak v té složce musíš mít soubor composer.json
.
Tím že tam ten soubor bude, se z ní stává balíček. Potom už můžeš
nad takovým projektem volat příkazy Composeru. viz https://doc.nette.org/…ces/composer#…
ako to je ked nepouzivam git ale svn (teda nespravim asi git clone)
Git by jsi si měl nainstalovat, ikdyž ho zrovna nepoužíváš. Spousta projektů git používá a Composer potřebuje git, aby právě takové projekty mohl instalovat. Většinou to jde bez něj, ale je prostě lepší ho mít.
Navíc být tebou, tak se pokusím protlačit git i do tvého zaměstnání, centralizované verzovací systémy jsou historie ;) Ale to je na jinou debatu.
O tejto moznosti (parameter create-project) som sa docital niekde v readme sandboxu a prvykrat som na to narazil v dokumentoch k Venne, tak som to skusil ale nie je to tam uplne dotiahnute asi (sandbox je uplne prazdny a robi len 404ku, ktovie kam mam napisat vobec routy), nette sandbox zobrazuje titulnu stranku ale neviem ci z toho vychadzat v novom projekte.
$ composer create-project nette/sandbox test-create
Installing nette/sandbox (dev-master 5fbc489a82b9958114ecadc7ca19ffa4449f4eed)
- Installing nette/sandbox (dev-master master)
Cloning master
Created project in test-create
Loading composer repositories with package information
Installing dependencies
- Installing nette/nette (dev-master 86830eb)
Cloning 86830ebea0545bb1e623b0d936ef8d4c43463ace
nette/nette suggests installing ext-memcache (*)
Writing lock file
Generating autoload files
$ cd test-create/
$ chmod 0777 -R temp/ log/
Otevřel jsem v prohlížeči a funguje. Nebude to tím, že nemáš git?
Napiste prosim ako pouzivate composer… ci si kazdu aplikaciu vytvorite ako package do composeru (z vlastnej repository – ako?) alebo si spravite ten composer.json a len stahujete dependency.
Na každou aplikaci by jsi měl mít vlastní composer.json
, ve
kterém bude napsané, jaké má závislosti. Ale není nezbytně nutné, aby
zároveň byla balíčkem. Většinou je to dokonce nevhodné.
Editoval HosipLan (17. 10. 2012 9:17)
- Patrik Votoček
- Člen | 2221
HosipLan napsal(a):
Ale co mi tam chyba je – ako to pouzit v projekte resp ako s tym vytvorit projekt.
Máš pravdu, vytvoření projektu zde chybělo. Je to proto, že
create-project
Nette začalo podporovat docela nedávno a zapomněli jsme na to. Přidal jsem to, díky za upozornění!
Na Planette je to už poměrně dlouho https://pla.nette.org/…box-composer
- Tomas P
- Člen | 27
HosipLan, vdaka za vycerpavajucu odpoved… vyzera ze to zacinam chapat, pripadne sa zase opytam ked na nieco narazim pocas skusania.
Veci ktore sa mi ujasnili (alebo ktore mi neboli jasne):
- autoload riesi ze je vsetko v roznych adresaroch – composer & manual libs, app dir atd. a tiez ze sa to da nakonfigurovat (vendor-dir).
- a tiez ze si musim sam do bootstrapu pridat require na ten composerovsky autoload.php
- tiez je dolezite vediet, ze aplikacia sa „create-project“-uje a dalsie sa „install“-uju… aj ked je to vsetko package
Git by jsi si měl nainstalovat
Ohladne git/svn – git nainstalovany mam, na par projektoch ho pouzivam (ucim sa ho)… casom asi prejdem, v praci ale asi zatial nie, kedze s repom robia aj nie uplne programatori.
nette/sandbox
Otevřel jsem v prohlížeči a funguje.
Sorry za zmatok, to 404 patrilo k venne/sandbox …
Ale mozno by som poznamenal, ze do Readme k instalacii Nette (obecne) mozte
pridat este ze www/.htaccess obsahuje RewriteBase, ktory sa obcas musi zmenit,
ak web bezi z adresara (IMHO caste hlavne pri vyvoji na localhoste).
Patrik Votoček napsal(a):
Na Planette je to už poměrně dlouho https://pla.nette.org/…box-composer
No, ja som sa k tomu dopatral az trosku neskor cez Readme.md na https://github.com/nette/sandbox (a originalne vlastne cez venne/sandbox na githube, ked som to hladal na fore). To ze nieco niekde je a nie je spravne nalinkovane (odkial by tam clovek mohol pokracovat) je trosku skoda :-(.
- Tomas P
- Člen | 27
Narazil som na dve veci, ktore neviem ako riesite
1, nette/nette/client-side obsahuje JS, ale ten, kedze je v /libs (/vendor) adresari, tak pristupny nebude. nenasiel som lepsi sposob ako ho pouzit, ako okopirovat do /www … ale v tom momente trosku stracam ze sa mi composer stara o update-ovanie nette (ako celku). existuje nejake lepsie riesenie (okrem symlinkovania)?
2, pouzivate minifikovanu verziu nette? ako sa starate o jej updateovanie, pripadne kopirovanie na live stranky (cez FTP)?
- Filip Procházka
- Moderator | 4668
On se Composer totiž vůbec nemá starat o statické soubory. Na to by jsi měl použít webloader nebo podobnou/vlastní komponentu.
- Tomas P
- Člen | 27
Aha,
takze webloader poriesi 1, loadnutie suborov z mimo www
adresar… vyzera to celkom pouzitelne.
Ale 2, minifikovana verzia nette asi nebude staticky subor… ako presvedcit composer, ze na live chceme mat iny balicek (ine balicky), pripadne ze framework (nette) bude niekde inde a inak. Tato cast mi nie je uplne jasna konceptualne… v kode sa napr da rozlisovat s isDebugMode() alebo nacitat z roznych sekcii config.neon – a tym napr nenaloadovat (neregistrovat/nepouzivat) niektore kniznice a pod. Mam na FTPko uploadovat libky nejak rucne, inak ako pouzivam pri vyvoji? alebo tam proste mat vsetko
Ako napr. uploadujes veci na FTPko. Nasiel som ftp-deployment od DG, ale zatial som sa k tomu nedostal (je to dobre?). Viac ludi pouziva NetBeans na toto, ale neviem ako poriesit lokalny vyvoj s obcasnym uploadom na live ftp.
- Filip Procházka
- Moderator | 4668
Někdo mi tuhle tvrdil, že APC je daleko efektivnější při větším množství menších souborů. Minifikování Nette tedy ztrácí význam. Imho to má význam pouze v tom, že to usnadní upload na FTP (1 soubor se nahraje rychleji).
Další věc je, že FTP je odporný protokol. Raději přejdi na SSH (čím dřív tím líp). Budeš mít výhodu bashe na serveru.
Co se týče sdílených knihoven pro více aplikací, je to na jednu stranu velice praktické, ale můžeš si tím také zadělat na problémy. Do Composeru se snažím protlačit link příkaz, který by tohle řešil čistě. Ale nějak se nedaří, snaží se teď optimalizovat systémové nároky.
- Tomas P
- Člen | 27
HosipLan napsal(a):
Někdo mi tuhle tvrdil, že APC je daleko efektivnější při větším množství menších souborů…
Ako som sa docital, APC je bytecode cache, teda na inej urovni ako minifikacia… o minifikacii je thread is-there-a-point-to-minifying-php na stackoverflow… a po zvazeni, asi to je skutocne dobre iba na zjednodusenie update-ovania na FTPku :-)
Další věc je, že FTP je odporný protokol. Raději přejdi na SSH (čím dřív tím líp). Budeš mít výhodu bashe na serveru.
njn, mne je to jasne :'-(… na serveru ktory administrujem ssh pristup mam, no v praci pouzivaju nejaky hosting zvonku a zatial som neprenikol k ludom ktory by to mohli zmenit :-\… tiez dufam v krajsie casy, hehe…
Vdaka za odpovede…
- Nox
- Člen | 378
To je prostě označení začátku příkazu (možná nepřesná definice)
v unixech, to tam nepiš
A při používání cmd je potřeba vědět jestli ty příkazy (systémové,
tj např. zde ne „composer“) vůbec pro win jsou (pokud je nemáš
zpřístupněný přes cygwin), zrovna v tomhle vlákně jsou tyto také
- Filip Procházka
- Moderator | 4668
Dolar znamená, že to máš psát do konzole, né že do ní máš psát dolar :)
- Šaman
- Člen | 2666
Našel jsem chybu, nebo dělám něco špatně.
Když postupuju podle návodu v dokumentaci, tak si
composer sice najde správnou verzi Nette, ale nenainstaluje ji.
- stáhl jsem si aktuální quickstart z odkazu na poslední funkční stránce (AJAX)
- zadal jsem $ composer install
- Píše to:
[Composer\Downloader\TransportException]
The „http://nodeload.github.com/nette/nette/zipball/v2.0.6“ file cannot be
downloaded (HTTP/1.1 404 Not Found)
- Pokud změním závislost (
"nette/nette": ">=2.0.5"
) podle dokumentace ("nette/nette": "2.0.*"
), tak to stále nefunguje, pokud to opíšu ze sandboxu ("nette/nette": "@dev"
), tak mi to správně nainstaluje.
Problém je, že nechci stahovat @dev, ale ostrou verzi. A druhý problém je, že nastavení podle návodu nefunguje. Můžete se na to někdo zasvěcený podívat? Díky.
- Patrik Votoček
- Člen | 2221
Aktualizuj si composer composer self-update
github totiž změni
URL pro stahování balíků.
- Šaman
- Člen | 2666
Díky, už to neháže chybu. Ale pořád jsou tu dva problémy:
- Chtělo by to aktualizovat Quickstart, protože ten neaktuální composer jsem si stáhl v něm. Na stránkách quickstartu jsem už postnul několik dalších broučků, bylo by dobré ho oprášit. Můžu se toho i ujmout, pracuju s ním teď kvůli výuce Nette a studenti už si stěžují, že se každou chvíli zaseknou.
- Stále mi to stahuje dev verzi. Jak napsat, že chci poslední stable verzi?
Teď mám zavislost popsanou
takto:
"nette/nette": ">=2.0.5"
Editoval Šaman (7. 11. 2012 6:14)
- Vojtěch Dobeš
- Gold Partner | 1316
Ad 1. Co máš na myslí tím „composer jsem si stáhl v něm“. V Quickstartu žádný composer není, jen composer.json. A ten se s ničím nemění.
Teď jsem si naklonoval quickstart z Githubu, zavolal
composer install
a šlape to, nainstaloval mi 2.0.6.
Editoval vojtech.dobes (7. 11. 2012 6:53)
- Šaman
- Člen | 2666
Ajo, už bych měl jít spát. Díky.
- Ok, composer jsem si nainstaloval někdy minulý týden sám.
- Asi za to může .lock soubor, smazal jsem nette a dal znovu install a ono mi to vrátilo do stavu odpovídajícímu .lock souboru, nikoliv .json. Po smazání Nette i .lock to už stahuje dobře.
- Šaman
- Člen | 2666
Když si stáhnu aktuální Nette a zkopíruji si Sandbox a dám
composer update
, tak mi to stáhne celý repozitář nette včetně
testů a gitu (wtf?), navíc to zkopíruje do jiné složky, než kde se již
Nette nachází. V této podobě to začátečníka spíše odradí a
domnívám se, že composer soubor je tam vpodstatě navíc (není kompatibilní
s tím, co jsem si nakopíroval).
Samozřejmě že mi pak autoloader nahlásí chybu, že našel více tříd se stejným názvem. Dá se s tím něco dělat? Sandbox je pro většinu lidí skeleton nové aplikace a tohle považuji za chybu.
- Filip Procházka
- Moderator | 4668
Vyřešeno – https://github.com/…tte/pull/910
Příště prosím založ nové vlákno
- Šaman
- Člen | 2666
Pěkný zombík, ale už zůstanu v tomhle infikovaném vlákně, když jsem to nakous.
Vyřešeno to není. Problém jsem přesně popsal:
- mám nainstalovaný a aktualizovaný composer a git
- stáhnu sandbox, který již obsahuje
composer.json
(Nette je ve složce'libs\Nette'
) - dám composer update a další Nette (včetně gitu a jiného smetí) se mi
nainstaluje do
'libs\nette\nette'
- výsledek: aplikace nefunguje (zdvojené třídy). Přitom jsem na nic nesahal.
- Co si pomyslím? „Composer nefunguje – mažu ho. Balíčky raději budu aktualizovat ručně, pak nad nimi mám kontrolu.“
- Co bych očekával? „Composer mi přepíše adresář
'libs\Nette'
aktuální verzí“.
- Filip Procházka
- Moderator | 4668
Pravda, nedošlo mi, že se bavíš o distribučním balíku :)
Řešením je upravit build script, aby vytvářel stejnou strukturu jako Composer, nikoliv učit Composer mazat soubory. Založíš issue v příslušném repozitáři?
- Prokop
- Člen | 31
Zdravim,
když chci stáhnout přes composer knihovnu, tak musí být v definovaná
v jejich balíčku (.json)? Takže např. Session-DebugBar přes
něj nestáhnu? Musím ručně?
Editoval Prokop (28. 3. 2013 15:25)
- enumag
- Člen | 2118
@Prokop: Přes composer se obecně dá stahovat v podstatě cokoli i pokud to nemá composer.json soubor, jen se to trochu složitě konfiguruje, osobně to nepoužívám… SessionDebugBar jako composer balíček existuje, konkrétně @HosipLanův fork. Jen pozor, že tato verze není kompatibilní s Nette 2.0, musíš použít 2.1-dev.
Editoval enumag (28. 3. 2013 15:31)
- Prokop
- Člen | 31
enumag napsal(a):
@Prokop: Přes composer se obecně dá stahovat v podstatě cokoli i pokud to nemá composer.json soubor, jen se to trochu složitě konfiguruje, osobně to nepoužívám… SessionDebugBar jako composer balíček existuje, konkrétně @HosipLanův fork.
Díky, možná by bylo fajn doplnit i tuto možnost do doplňku Debug-panelu