Best practice – Sdílené knihovny

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

Zajímalo by mne, jak při vývoji řešíte knihovny, které jsou potřebné ka každému projektu?
Opravdu pokaždé dáte knihovnu Nette, dibi … do složky /libs?

Osobně mám co projekt, to projekt.l a stále rozkopírovávání knihoven v tom dělá bordel. To hlavně v případě, kdy mám svou vlastní knihovnu, kterou průběžně upravuji.

Napadlo mne toto řešení, ale je to „divné“ (+ samozřejmě BASE_LIBS_DIR registruji pro robotloader).

// Absolute filesystem path to the base libraries
// Only on development
if (@file_exists($_SERVER["DOCUMENT_ROOT"] . "/_libs")) {

	define("BASE_LIBS_DIR", $_SERVER["DOCUMENT_ROOT"] . "/_libs");

} else {

	define("BASE_LIBS_DIR", WWW_DIR . "/libs");

}

// Absolute filesystem path to the libraries
define("LIBS_DIR", WWW_DIR . "/libs");
mkoubik
Člen | 728
+
0
-

Zkus se podívat na composer.

MartinitCZ
Člen | 580
+
0
-

@**mkoubik**: Díky, ale to řeší jen problém v případě, že to daná knihovna podporuje. Tkaže řešení jen na 50%.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Opravdu pokaždé dám do složky libs knihovny, ano. Projekty jsou různá stvoření, různě se vyvíjejí a každý směřuje po vlastní cestě. Pokud by byli knihovny sdílené mezi všemi projekty a já chtěl u jednoho projektu aktualizovat některou knihovnu, musel bych se ujistit, že aktualizace půjde bez problémů i u všech ostatních projektů. A to by mě taky mohlo od všech aktualizací nadobro odradit.

Mimoto Composerem jdou stahovat i knihovny, které v Composeru nejsou (stačí zalovit v dokumentaci). Každá knihovna totiž principielně Composer podporuje (pokavaď je to alespoň jeden PHP skript).

enumag
Člen | 2118
+
0
-

@vojtech.dobes: Moment, vím jak přes composer přidat knihovnu, která je na GitHubu, ale ne na packagistu – ale pouze v případě, že ta knihovna má v repozitáři composer.json. Ono to jde i bez toho? :-O

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

@enumag Bez toho Githubu to skutečně nejde, ale pak už asi nic lepšího než kopírování není :).

Jan Tvrdík
Nette guru | 2595
+
0
-

@vojtech.dobes: Pokud se nemýlím já, tak se mýlíš ty, protože já tvrdím, že ta knihovna nemusí být ani na GitHubu. Dokonce nemusí mít ani stáhnutelný zip archiv z internetu. Viz dokumentace.

Stejně tak ale tvrdím, že složka libs by měla být součástí repozitáře a neměla by tedy být zahrnutá v .gitignore.

enumag
Člen | 2118
+
0
-

@vojtech.dobes: Měl jsem na mysli, že to nejde pokud to repo nemá soubor composer.json. Jak koukám na dokumentaci co poslal Jan Tvrdík, tak to zřejmě půjde když to repo přidám ne jako typ vcs ale jako typ package s tím, že to vcs bude potom v oddílu dist.

Stejně se mi ale nelíbí řešit všechny knihovny tímto způsobem přes composer, zvlášť pokud jde o staré knihovny, které bez úprav ani nefungují (případ z nedávné doby: připojení aplikace na SMS bránu). Kromě toho kdo ví jak dlouho bude fungovat odkaz ke stažení, pak by to už najednou composerem nešlo nainstalovat a co s tim. Podobné věci tedy raději kopíruju do libs ručně a verzuju přímo s projektem.

S tím rovněž souvisí, že nechápu proč nette/sandbox používá složku libs místo vendor, osobně pro composer nechávám tu složku vendor. Kdybych to měl v jedné špatně by se rozlišovalo co je verzované přes git a co není, takhle mohu ignorovat celou složku vendor (až na htaccess) a verzovat libs (ta je sice téměř prázdná, ale ještě se mi nestalo, že bych v ní neměl opravdu nic).

Editoval enumag (12. 12. 2012 22:15)