Většina týmů se zasekne na tom, jestli pracovat s dlouho žijícími větvemi, nebo commitovat rovnou do hlavní linie. Rozdíl není v nástroji, ale v tom, jak rychle dokážete dostat změnu k ostatním a jak drahé je vrátit ji zpět. Trunk-based vývoj znamená, že každý den mergujete do main; feature branch znamená, že změna žije odděleně, dokud není hotová. Ani jedno není univerzálně správné.
Konflikty řešte hned, jak vzniknou. Není nic horšího než odložený merge, u kterého už nevíte, která verze je správná. Při řešení konfliktu si vždycky projděte obě strany a ověřte, že výsledek dává smysl v kontextu obou změn. Po vyřešení spusťte testy, ne až po commitu. Pokud si nejste jistí, zavolejte autora druhé změny — pět minut rozhovoru ušetří hodiny ladění.
Růst codebase se projeví nejdřív na testech. Sada, která běžela dvě minuty, najednou trvá dvacet a padá z důvodů, které nesouvisí s kódem. Většina týmů reaguje přidáním dalších testů, čímž problém zhorší. Řešení není víc testů, ale jasné rozdělení odpovědností mezi jednotkovou a integrační vrstvou.
Poslední věc: nastavte si ochranu hlavní větve. Zakázat přímý push do mainu, vyžadovat procházející testy a alespoň jedno schválení. Tím zmizí většina nehod, kdy někdo omylem pošle rozbitý kód. Ať už zvolíte feature branch, nebo trunk-based, platí stejné pravidlo: čím menší a častější změny, tím menší bolest při jejich spojování.
Se složkami a kopiemi pracuj vědomě. Operátor = u objektů a polí nekopíruje, jen vytvoří další odkaz. Když potřebuješ skutečnou kopii, použij spread ...obj nebo [ ...arr ]. Pozor ale na mělkou kopii: vnořené objekty zůstávají sdílené. U funkcí používej const jako výchozí volbu, let jen tam, kde se hodnota skutečně mění, a var nech stranou. Stejně tak sáhni po map, filter a reduce místo ručních cyklů s for a pomocnými poli, pokud jde o transformaci dat.
Kde se čas ztrácí nejčastě
Pull requesty držte malé. Ideálně do 400 změněných řádků, jinak recenzent ztrácí pozornost a přehlédne chyby. Do popisu napište, co se mění a proč, ne jak. Recenzent potřebuje vědět, jaký problém to řeší, ne jak jste to napsali. Nikdy neschvalujte vlastní změny a nikdy nemergujte bez alespoň jednoho schválení od někoho jiného. Pokud na review nikdo nereaguje do jednoho pracovního dne, ozvěte se přímo — nečekejte.
Začněte tím, že si tým rozdělí práci na malé celky. Pokud větev žije déle než dva dny, rozpadá se na konflikty a ztracený kontext. Praktické pravidlo: jedna větev = jedna logická změna, kterou lze popsat jednou větou. Když popis potřebuje „a zároveň", rozdělte ji. Větve pojmenovávejte krátce a konkrétně, například oprava-prihlaseni nebo platebni-formular. Vyhněte se jménům jako vetev1, test nebo nova-verze.
Poslední věc je práce s daty. Nepoužívej globální proměnné, pokud to není nutné. Předávej hodnoty parametrem nebo je drž v uzavřeném rozsahu. U polí a objektů dávej pozor na sdílené reference — když jedno místo v kódu změní objekt, změní se i jinde. Čistý kód se pozná tak, že změna na jednom místě nevyvolá překvapení na druhém. To je celý cíl, nic víc za tím nehledej.
Node.js sám o sobě nabízí jen holý HTTP server. Vytvořit v něm REST API znamená ručně řešit routování, parsování těla požadavku, hlavičky i chybové stavy. Express je minimalistická vrstva, která tyto opakující se úkoly zastřeší, aniž by ti vzala kontrolu nad během aplikace. Instalace je otázkou jednoho příkazu v terminálu a prvních pár řádků kódu už vrací odpověď.
Základ vypadá takto: vytvoříš instanci aplikace, zaregistruješ middleware pro čtení JSON a definuješ routy pomocí metod odpovídajících HTTP slovesům. Pro kolekci zdrojů použij množné číslo v cestě, například cesta k seznamu položek. Parametry v cestě zachytíš dvojtečkou a čteš je z objektu požadavku. Návratové kódy nejsou dekorace: 200 pro úspěch, 201 při vytvoření, 204 při smazání bez těla, 400 při chybném vstupu, 404 když zdroj neexistuje.
Když se větev rozroste, merge bolí Nejčastější chyba je dlouhé odkládání merge. Čím déle větev stojí, tím víc se hlavní linie vzdaluje a tím víc ručního slévání vás čeká. Řešení je rebase proti mainu dělat průběžně, ne až na konci. Rebase přepíše historii větve, takže ji nikdy nedělejte na větvi, kterou už někdo jiný stáhl k sobě. Pokud na větvi pracuje víc lidí, použijte merge z mainu do větve místo rebase. Tím zachováte společnou historii a vyhnete se zmatkům.
Pro strukturu projektu se osvědčuje rozdělit routy, obsluhy a přístup k datům do samostatných souborů. Jakmile počet rout přesáhne desítku, jeden soubor se stane nepřehledným. Konfiguraci a tajné klíče drž mimo kód, ideálně v proměnných prostředí. Validuj vstup na hranici aplikace, ne až uvnitř logiky. Ať už data ukládáš kamkoli, odděl dotazování od obsluhy rout, jinak se změna úložiště zvrhne v přepisování celé aplikace.