Dostaňte nás z pekla závislostí

Dostaňte nás z pekla závislostí

většina moderních služeb a aplikací má množství závislostí, které žijí ve stále rostoucí složce node-modules. Obecně je mnoho z těchto knihoven aktivně udržováno, změněno a aktualizováno. Pokud jsou vaše závislosti špatně spravovány, můžete se rychle ocitnout v pekle závislostí.

Pokud nejste obeznámeni s npm, zkontrolujte to zde před přečtením na

🛒 nakupování potravin

při spuštění aplikace uzlu je spuštěn jeden z prvních kroků npm install. Když toto spustíte, uzel zkontroluje soubor s názvem package.json v základně vašeho projektu. Pokud je tento soubor nalezen, použije sekci dependency jako druh „nákupního seznamu potravin“ a shromáždí „přísady“ (bity kódu), které vaše aplikace vyžaduje.
Alt Text
„obchod s potravinami“ je v tomto případě něco, co npm nazývá registry. Ve výchozím nastavení bude vaše aplikace node hledat ve veřejném registru npm pro tyto balíčky, kde bude většina všeho, co potřebujete (soukromé registry mohou být vytvořeny pro proprietární kód a kdoví co ještě). Pokud je balíček nalezen v registru, node umístí tuto „složku“ do adresáře node_modules na základně vašeho projektu.

je důležité si uvědomit, že balíčky, které požadujete, mohou mít svůj vlastní „nákupní seznam“ (balíček.json), a všechny tyto vnořené závislosti musí být vyřešeny dříve, než se vaše aplikace přesune na další závislost ve svém vlastním balíčku.json.

Alt Text

⬆️ verze , Care Carets a 🃏 zástupné znaky

verze vašich závislostí jsou obecně něco jako v1.3.5. Tomu se říká sémantická verze nebo semver. U semveru představují čísla změny kódu v různé závažnosti – MAJOR.MINOR.PATCH.
z jejich dokumentů –

hlavní verze při provádění nekompatibilních změn API,
menší verze při přidávání funkcí zpětně kompatibilním způsobem a
opravná verze při opravách chyb zpětně kompatibilních.

s ohledem na to mnoho lidí chce automaticky aktualizovat svou aplikaci novými novými věcmi, které by jejich závislosti mohly mít v novějších, neporušujících změnách.

Prefixování vlnovkou ~ vám poskytne jakékoli nové PATCH aktualizace, ale ne velké nebo menší. Takže ~1.3.1 mohl nainstalovat 1.3.9, ale ne 1.4.0

Prefixování s caret ^ vám poskytne všechny nové verze PATCH a MINOR, ale ne hlavní. Takže ^1.3.1 mohl nainstalovat 1.4.9 , ale ne 1.5.0
 Alt Text
 Alt Text

podívejme se na strom závislostí našeho příkladového kódu:

my-breakfast | | milk | |coffee-script 

Ok, spíš jako hůl, ale doufejme, že řetězec závislosti je jasný. Náš balíček.json vyžaduje verzi v0.5.0 konkrétně milk, ale mléko vyžaduje coffee-script kdekoli od 0.9.61.0.0. npm install je spuštěn, vyvíjíme naši aplikaci, vše je hunky-dory.

Now Nyní pojďme rychle vpřed o 2 měsíce. Někdo najde váš projekt a chce přispět. Rozvětvují a klonují vaše repo, běží npm install, AAAA to nefunguje. „Ale fungovalo to na mém stroji!“ty pláčeš. Když váš spolupracovník nainstaloval moduly uzlu, byla jim zaručena konkrétní verze milk, ale dostali jinou verzi coffee-script, protože balíček milk.json použil semver.

Setting nastavení závislostí v kameni

jedním z řešení je použití souboru package-lock.json. Tento soubor vám dává velmi podrobnou kontrolu nad verzemi každé závislosti, kterou nainstalujete. Pokud je váš package.json jako nákupní seznam, pak je váš package-lock.json jako rozpočet. Můžete si dát cereálie, ale místo Cap ‚ n Crunch to bude značka obchodu. Tato specifičnost běží až do každé větve stromu závislostí. Pokud chcete použít Soubor zámku, musíte mít package.json (package.json dělá mnohem víc než jen správu závislostí, to je jen zaměření tohoto příspěvku).

Wrapping zabalení

osobně mám pocit, že soubor package-lock.json by měl být vždy použit (v novějších verzích npm je ve skutečnosti automaticky generován). Díky tomu je vše spolehlivější v prostředích a nasazení. Zde je několik posledních malých nugetů, které snad pomohou, pokud jde o dependecies:

  • npm install --save automaticky aktualizuje váš lockfile a balíček.json s tím balíčkem.
  • npm ci namísto npm install automaticky obnoví moduly uzlů a vytvoří z vašeho souboru lockfile. Je to opravdu užitečný příkaz pro CI / CD a obecně nejlepší použít v tandemu s lockfile.
  • pro větší projekty a super robustní závislost se podívejte na docker a kontejnery. Může fungovat téměř jako virtuální stroj, který dokonale obsahuje váš kód a jeho závislosti a je klonován k propagaci do různých prostředí. Takže doufejme, že skončíte s mnohem méně „fungovalo to na mém stroji“.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.