Composer – navod pouzitia v projektoch (nove/stare)

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

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
+
0
-

Zkus si pro začátek projít tohle a zítra ti zkusím odpověděť obšírněji.

Tomas P
Člen | 27
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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…

Siam
Člen | 54
+
0
-

Asi budu za strašnou lamu, ale nechápu proč je před těma příkazama ten dolar. Příkazový řádek ve windows mi ho nebere a bez něj mi to bere.

Nox
Člen | 378
+
0
-

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
+
0
-

Dolar znamená, že to máš psát do konzole, né že do ní máš psát dolar :)

Šaman
Člen | 2666
+
0
-

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.

  1. stáhl jsem si aktuální quickstart z odkazu na poslední funkční stránce (AJAX)
  2. zadal jsem $ composer install
  3. 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)

  1. 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
+
0
-

Aktualizuj si composer composer self-update github totiž změni URL pro stahování balíků.

Šaman
Člen | 2666
+
0
-

Díky, už to neháže chybu. Ale pořád jsou tu dva problémy:

  1. 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.
  2. 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
+
0
-

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
+
0
-

Ajo, už bych měl jít spát. Díky.

  1. Ok, composer jsem si nainstaloval někdy minulý týden sám.
  2. 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.
Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Konec dobrý, všechno dobré :).

enumag
Člen | 2118
+
0
-

Mám pocit že .lock mazat nemusíš, na to je tuším příkaz composer update.

Šaman
Člen | 2666
+
0
-

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
+
0
-

Vyřešeno – https://github.com/…tte/pull/910

Příště prosím založ nové vlákno

Šaman
Člen | 2666
+
0
-

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í“.
Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Je to pravda, kompletní Nette je v zip balíčku v sekci Downloads.

Filip Procházka
Moderator | 4668
+
0
-

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
+
0
-

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
+
0
-

@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
+
0
-

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