Caret vs Tilde v package.json

Soubor package.json je srdcem všech balíčků npm a bez ohledu na to, co můžete mít ve svém projektu, jedna věc je jistá:vždy tu bude soubor package.json. Z mnoha věcí obsažených v souboru package.json se dnes budeme bavit o správě závislostí.

Myslím, že většina vývojářů by souhlasila s tím, že správa závislostí nebyla nikdy snadným úkolem v raných dobách jazyků na vysoké úrovni, jako je JavaScript. Stačí se zeptat vývojáře v Javě, jaký byl život, než přišel Maven; nebo si možná promluvte s vývojářem Ruby o tom, jaký vliv má RubyGems na jejich vývoj. Totéž platí pro vývojáře Node.js. Bez správy závislostí npm a package.json by život nebyl tak snadný.

Vsuvky a vlnovky v číslech verzí

V rámci každého projektu podporovaného npm jsou závislosti sledovány a spravovány v souboru package.json prostřednictvím vlastnosti JSON „dependencies“. Normálně jsou tyto závislosti docela přímočaré a snadno pochopitelné. I když občas si můžete všimnout změn čísel verzí po použití --save možnost v package.json. Když se na to podíváte dále, možná zjistíte, že čísla verzí mají nyní před sebou neznámý znak.

Konkrétně byste mohli skončit s něčím jako:

"dependencies": {
  "express": "^3.9.2"
}

Nebo další možnost je:

"dependencies": {
  "express": "~3.9.2"
}

Takže co tam nahoře vlastně dělá tato "^" (nebo "~") postava? Nebojte se, je to docela jednoduché a pokusím se to vysvětlit.

Znaky před čísly verzí jsou předpony, které označujeme jako znaky stříšky (^) a vlnovky (~). Přidávají je vývojáři (nebo npm), aby uvedli omezení, která čísla verzí softwaru lze použít jako závislost ve vašem projektu . Tato číselná schémata se řídí konvencí známou jako sémantické verzování nebo semver. Samotná skutečná čísla se používají v systému verzování k označení typu provedených změn, které vedly ke zvýšení čísla verze. Čísla (3, 9 a 2) ve výše uvedeném příkladu jsou označována jako hlavní, vedlejší a čísla polí zleva doprava.

Než se pustíme do podrobností o tom, co vlastně stříška a vlnovka znamenají, podívejme se na rychlý přehled toho, kdy by měla být každá číslice v čísle verze zvýšena při provádění změn v kódové základně:

  1. Zpětně nekompatibilní změny zvyšují hlavní číslice.
  2. Pokud je provedena nová (zpětně kompatibilní) změna, pak menší číslice se zvýší.
  3. Jednoduché opravy chyb (stávající funkce) zvyšují záplatu číslice.

Když spustíte npm install v čistém adresáři projektu, nejvyšší pro každou závislost je nainstalována dostupná verze softwaru pro závislost, která je schopna splnit číslo verze uvedené v package.json. Pokud tedy není uvedeno žádné ^ nebo ~, použije se přesné uvedené číslo verze.

Avšak tím, že neuvedete přesnou verzi závislosti v souboru package.json a použijete znaky stříšky (^) nebo vlnovky (~), umožňuje npm rozšířit rozsah akceptovaných verzí. Když --save Pokud je použit příznak, výchozí funkcí je předpona verze znakem stříšky. A samozřejmě to lze nakonfigurovat pomocí parametru save-prefix.

Pokud jde o sémantické verzování, zde je rozpis toho, jaké změny kódové základny znak stříšky umožní:

Vstříc umožňuje...

  • Nové zpětně kompatibilní funkce
  • Velký vnitřní refaktor
  • Opravy chyb
  • Ukončení podpory staré funkce (která je stále funkční)

Pomocí stříšky můžete získat vydání jako 3.. , kde znaky * budou odpovídat nejvyššímu dostupné číslo verze. Takže změny v hlavní číslici, jako je 4.0.0, nebudou v tomto případě použity.

Zdarma e-kniha:Git Essentials

Prohlédněte si našeho praktického průvodce učením Git s osvědčenými postupy, průmyslově uznávanými standardy a přiloženým cheat sheetem. Přestaňte používat příkazy Google Git a skutečně se naučte to!

Tilda umožňuje...

  • Opravy chyb

S tilde můžete získat vydání jako 3.9.*. S vlnovkou jsou povoleny pouze nejnovější opravy chyb.

Můžeme tedy uzavřít tím, že pokud chcete zamknout, měl by být použit znak ~ číslo patche. Tuto možnost byste měli použít, když jste připraveni přijmout pouze opravy chyb a nechcete čelit případným neslučitelným změnám. Na druhou stranu je znak ^ zodpovědný za uzamčení patche a čísla vedlejších verzí. Používá se, když chcete mít zpětně kompatibilní nové funkce a také opravy chyb.

Závěr

Mějte na paměti, že velmi staré verze npm nepodporují ^ takže jej používejte opatrně. I když kterákoli z verzí npm vydaných v posledním roce by měla být v pořádku. Ve většině případů by vás to nemělo ovlivnit.

Tady opravdu neexistuje "nejlepší volba", protože oba mají své použití v různých scénářích. Vše záleží na požadavcích vašeho projektu a osobních preferencích. Pouhá znalost této funkce v semver a npm vám může ušetřit spoustu starostí a také čas tím, že nebudete muset neustále ručně aktualizovat verze závislostí.

Máte preferovanou volbu? Máte špatnou zkušenost s používáním stříšky nebo tildy? Dejte nám vědět v komentářích!