SemVer je specifikace, jejímž cílem je sjednocení způsobu verzování software.
Související
Autorům prostě předepisuje, jakým způsobem označovat nové verze jejich programů.
Major.Minor.Patch
Vezměme, že software vyjde v této verzi:
1.2.3
(…a že autoři dodržují SemVer, což není úplná samozřejmost.)
Major: 1.y.z
První číslovka je určená pro major verze, které mohou do software přinášet zlomové změny – v našem příkladu je to číslo 1
na první pozici.
Specifikace ale mluví o výjimce pro verze začínající nulou: Major verze s hodnotou 0 (0.y.z
) je určena pro počáteční vývoj. Cokoliv se může změnit a API v tomto formátu by nemělo být považováno za stabilní.
Minor: x.2.z
Číslovka za tečkou označuje minor verzi. Ta může přinášet tyto změny:
- přidání zpětně kompatibilní funkcionality,
- odebrání funkcionality (jako zastaralé) i pokud neovlivňuje samotný API kód.
Jde prostě o změny, které jsou z pohledu uživatele programu zpětně kompatibilní. V příkladu nahoře je to číslovka 2
na druhé pozici.
Patch: x.y.3
Třetí číslovka je patch. Ta se mění při opravách chyb. V ukázce výše je to číslovka 3
na třetí pozici.
Nicmoc složitého na tom není. Specifikace je v českém překladu dostupná zde: semver.org/lang/cs/
Protože jsme ale na blogu, který se věnuje převážně webového frontendovému vývoji, musíme se podívat, jaký má SemVer vliv na vyžadování verzí v konfiguraci NPM – package.json.
SemVer a package.json
Vytáhněme si kousek tohoto konfiguračního souboru:
"dependencies": {
"bootstrap": "^4.1.3",
"jquery": "~3.3.1",
"popper.js": "1.14.4"
}
Speciálními znaky u čísel verzí říkám, jakým způsobem je dovoleno tyhle balíčky aktualizovat (např. při vyžádání pomocí npm install
):
^
– stříška (caret) umožňuje stahovat libovolné „minor“ verze. Zde u Bootstrapu klidně stáhne verzi4.2.0
, ale už ne třeba5.0.0
.~
– vlnovka (tilde) stahuje jen nové „patch“ verze. Takže jsme NPM dovolili stáhnout například verzi3.3.11
, ale už ne3.4.0
.- Bez speciálních znaků uvedená verze u Popper.js znamená: Chci přesně tuhle verzi a basta.
U běžných frontendových balíčků je možné dávat stříšku. Pokud ten software dobře neznáte nebo chcete být opatrní, pak doporučuji vlnovku.
Existují zde ale i další možnosti:
latest
– chcete vždycky poslední verzi tohoto software.*
– balíček se aktualizuje zcela libovolně, nezáleží vám na verzi. To samé udělá prázdná definice, např."bootstrap": ""
.>
,<
– větší než, menší než. Možné je i „větší nebo rovno“ a tak dále. Nebo rozmezí:">=1.2.7 <1.3.0"
.1.2.x
– stejné jako vlnovka. Aktualizuje se jen patch verze.
Více možností a příkladů je v dokumentaci NPM: docs.npmjs.com/files/package.json
SemVer v NPM
Výchozí typ závislostí je stříška, tedy možnost aktualizace minor verzí: ^4.1.3
.
Pár užitečných příkazů:
npm update
nebonpm install
stáhne nové verze podle deklarace v package.json.npm outdated
zobrazí seznam dostupných aktualizací. Velmi užitečné.npm install <balicek>@1.2.3
stáhne a uloží balíček ve specifikované verzi.npm install <balicek> --save-exact
stáhne a uloží balíček. Do package.json jej vloží v přesné verzi, např."balicek": "1.12.1"
.npm config set save-prefix '~'
změní výchozí specifikaci závislostí ze stříšky na vlnovku. Pokud k tomu nemáte silné důvody, rozhodně nedoporučuji dělat.
Komentáře
Máte doplnění, komentář nebo jste našli chybu?
Pro přidání názoru se prosím
přihlaste nebo si zřiďte účet.