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 |