Jak přepsat své závislosti (Node.js)

npm vydala verzi 8.3 jejich klienta CLI v prosinci a vydání vedlejší verze vypadá neokázale, ale obsahuje velmi užitečnou novou funkci - "přepisy".

Ekosystém JavaScriptu je v plamenech od doby, kdy se objevily Node.js a npm. Vždy je na všechno balíček, protože lidé publikovali YOLO, co se jim zlíbí. Je to pulsující a schopný ekosystém jako na divokém divokém západě. A samozřejmě, nespočet závislostí má své klady a zápory.

Líbí se mi, že mohu „prostě nainstalovat další balíček“, ale sdílím obavy z rostoucí složitosti projektu. Předpokládejme, že váš projekt spoléhá na jednu závislost, která závisí na jiné, která opět závisí na jiné. V takovém případě se může pokazit nespočet věcí, ale nejkritičtější je, když byla vaše závislost napadena nebo provedla něco škodlivého.

Přečtěte si více o nedávné příležitosti a node-ipc incident v březnu 2022.

Přepisy npm vám umožňují ovládat závislosti vašich závislostí

"npm overrides" vám dává větší kontrolu nad tím, co je nainstalováno ve vašem stromu závislostí.

Řekněme, že jedna z vašich závislostí (1. úroveň) spoléhá na jinou závislost, která zahrnuje zastaralé jiné závislosti (2. úroveň). Neexistuje snadný způsob, jak ovládat vnořené verze závislostí v node_modules jiný strom než větvení a oprava vaší závislosti první úrovně.

your-project
  |_ some-module @1.0.0
      |_ another-module-which-should-be-updated @1.0.0

Nyní můžete zadat overrides vlastnost ve vašem package.json k přepsání a vynucení vnořených verzí závislostí.

{
  "overrides": {
    "[email protected]": {
      "foo": "1.0.0"
    }
  }
}

Nad bar balíček s verzí 2.0.0 by bylo přepsáno foo .

Naši přátelé ve Snyku sdíleli úryvek, který popisuje, jak přepsat balíček konkrétním rozsahem verzí. Přečtěte si následující package.json konfigurace jako:

  • přepsat každých node-ipc balíček větší než 9.2.1 ale menší než 10 .
  • přepsat každých node-ipc balíček větší než 10.1.0 .
{
  "overrides": {
    "node-ipc@>9.2.1 <10": "9.2.1",
    "node-ipc@>10.1.0": "10.1.0"
  }
}

Nová funkce přepsání se hodí pro:

  • opravit závislost se známým bezpečnostním problémem
  • nahradit existující závislost forkem
  • zajistěte, aby se všude používala stejná verze balíčku.

Je to takový vítaný doplněk; díky, npm! 🎉

Přečtěte si o tom více v dokumentech npm.