Best practice – Sdílené knihovny
- MartinitCZ
- Člen | 580
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");
- MartinitCZ
- Člen | 580
@**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
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).
- Vojtěch Dobeš
- Gold Partner | 1316
@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
@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
@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)