Jak migrovat z příze / npm na pnpm

Motivace

pnpm je výkonnější při načítání, řešení a ukládání závislostí. Moje osobní zkušenost ukazuje, že v některých projektech pnpm může být cca. 10x rychlejší při řešení závislostí a až 3x efektivnější využití disku.

Je také snadné začít používat pnpm pokud jste použili npm nebo yarn dříve, protože CLI je velmi podobný.

https://pnpm.io/motivation

Průvodce migrací

Krok 1 :Nainstalujte pnpm Instalace
Krok 2 :Smazat node_modules

npx npkill

Krok 3 :Přidat do package.json

"scripts": {
  "preinstall": "npx only-allow pnpm", 
  ...
}

To zabrání ostatním vývojářům v náhodné instalaci závislostí s čímkoli jiným než pnpm

Krok 4 :Vytvořte pnpm-workspace.yaml

packages:
  # include packages in subfolders (e.g. apps/ and packages/)
  - "apps/**"
  - 'packages/**'
  # if required, exclude some directories
  - '!**/test/**'

Krok 4 (a) :odstranit "workspaces" od "package.json" , protože již není potřeba.

Krok 5 :Utíkej

pnpm import

Tento příkaz vytvoří pnpm-lock.yaml soubor založený na yarn.lock (nebo packages-lock.json )
Krok 6 :Odeberte yarn.lock (nebo packages-lock.json )
Krok 7 :Instalace závislostí

pnpm i

Krok 8 :Nahraďte npm run (nebo yarn ) na pnpm ve všech package.json a další soubory (např. pnpm test místo npm run test )

Důležité! Musíte mít na paměti, že pnpm nepoužívá závislost zdvihání:

V praxi to znamená, že pokud máte balíček A který importuje balíček B (import something from 'B' ), ale výslovně nespecifikuje B v dependencies nebo devDependencies , pak se provedení nezdaří.

Cheatsheet

Tabulky Příkazy Super
Instalovat závislosti pnpm i https://pnpm.io/cli/install
Přidat závislost pnpm add <package> https://pnpm.io/cli/add
Zobrazuje všechny balíčky, které závisí na zadaném balíčku pnpm why <package> https://pnpm.io/cli/why
Spusťte příkaz, jako by byl proveden z kořenového adresáře projektu, nikoli z balíčku pracovního prostoru pnpm -w <command> https://pnpm.io/pnpm-cli#-w---workspace-root
Omezit příkazy na konkrétní podmnožiny balíčků pnpm --filter <package_selector> <command> https://pnpm.io/filtering
To spustí libovolný příkaz z objektu "scripts" každého balíčku pnpm -r <command> https://pnpm.io/cli/run#--recursive--r