Что это такое?
PNPM - быстрый пакетный менеджер для Node.js. Он экономит место на диске за счёт общего хранилища пакетов и жёстких ссылок, а также строже работает с зависимостями, чем классический npm.
Базовые команды
# установка зависимостей
pnpm install
# установка пакета в dependencies
pnpm add zod
# установка пакета в devDependencies
pnpm add -D typescript vitest
# удаление пакета
pnpm remove lodash
# запуск скрипта из package.json
pnpm dev
# выполнение пакета без установки в проект
pnpm dlx create-viteПочему PNPM полезен в TypeScript-проектах
- быстрее ставит зависимости в больших проектах;
- хорошо подходит для monorepo;
- уменьшает случайные зависимости от пакетов, которые не указаны в
package.json; - поддерживает workspaces из коробки;
- удобен для CI за счёт lockfile
pnpm-lock.yaml.
Workspaces
pnpm-workspace.yaml
packages:
- apps/*
- packages/*
- libs/*После этого можно держать несколько приложений и библиотек в одном репозитории.
# запустить build во всех пакетах
pnpm -r build
# запустить команду только в одном пакете
pnpm --filter web dev
# добавить зависимость в конкретный пакет
pnpm --filter api add zodУстановка алиаса
Чтобы не писать постоянно pnpm, мы можем создать алиас
на win
notepad $profile.AllUsersAllHosts
profile.ps1
set-alias -name pn -value pnpm
на linux
alias pn=pnpm
Плюсы
- быстрая установка зависимостей;
- экономит место на диске;
- сильная поддержка workspaces и monorepo.
Минусы
- строгая структура node_modules может вскрыть ошибки зависимостей;
- некоторые старые пакеты ожидают npm/yarn-поведение;
- команде нужно привыкнуть к фильтрам и workspace-командам.
Когда использовать
- нужен пакетный менеджер для современного TypeScript-проекта;
- в репозитории несколько apps/packages;
- важны скорость CI и воспроизводимость lockfile.