pnpm — Performant Node Package Manager
Visão Geral
- pnpm (Performant NPM) é um gerenciador de pacotes para Node.js, eficiente em termos de velocidade e uso de disco. :contentReference[oaicite:1]{index=1}
- Utiliza um sistema de armazenamento global e baseado em conteúdo (content-addressable storage), onde dependências são vinculadas (hard links/symlinks), economizando espaço e acelerando instalações. :contentReference[oaicite:2]{index=2}
- Ideal para monorepos, com instalação rigorosa (“strict”) — só acessa dependências declaradas no
package.json
. :contentReference[oaicite:3]{index=3}
Motivos para Usar
- Instalações até 2× mais rápidas que npm ou Yarn. :contentReference[oaicite:4]{index=4}
- Economia significativa de espaço em disco, especialmente com múltiplos projetos. :contentReference[oaicite:5]{index=5}
- Organização mais limpa de
node_modules
, evitando bugs por dependências implícitas. :contentReference[oaicite:6]{index=6}
Instalação
Pré-requisitos
- É necessário ter Node.js ≥ v18.12 ou usar a versão standalone. :contentReference[oaicite:7]{index=7}
Métodos de instalação
- Standalone script:
- POSIX:
curl -fsSL https://get.pnpm.io/install.sh | sh
- Windows (PowerShell):
Invoke-WebRequest https://get.pnpm.io/install.ps1 -UseBasicParsing | Invoke-Expression
:contentReference[oaicite:8]{index=8}
- POSIX:
- Corepack (recomendado com Node.js modernos):
corepack enable pnpm
corepack use pnpm@latest-10
(fixa versão nopackage.json
) :contentReference[oaicite:9]{index=9}
- Outras opções: npm, Homebrew, winget, Scoop, Chocolatey, Volta. :contentReference[oaicite:10]{index=10}
Comandos Básicos
pnpm install
(oupnpm i
): instala todas as dependências. Em CI, falha se o lockfile estiver desatualizado. :contentReference[oaicite:11]{index=11}- Exemplos de flags úteis:
--offline
,--frozen-lockfile
,--lockfile-only
,--force
:contentReference[oaicite:12]{index=12}
- Exemplos de flags úteis:
pnpm add <pacote>
: instala dependência. Por padrão, comodependencies
; há flags-D
(dev),-O
(optional),-g
(global), versão específica etc. :contentReference[oaicite:13]{index=13}- Comandos compatíveis com npm:
pnpm run <script>
, ou diretamentepnpm <script>
;pnpm add
,pnpm install
etc. :contentReference[oaicite:14]{index=14}
Configuração e Workspaces
- Arquivo
pnpm-workspace.yaml
e configs globais compnpm config
. :contentReference[oaicite:15]{index=15} - Recursos úteis:
- overrides: forçar versões/resolver dependências específicas. :contentReference[oaicite:16]{index=16}
- packageExtensions: corrigir pacotes (ex: adicionar
peerDependencies
). :contentReference[oaicite:17]{index=17} - sharedWorkspaceLockfile: unifica o
pnpm-lock.yaml
no root de monorepo, mantendo singleton de dependências. :contentReference[oaicite:18]{index=18} - Outras opções:
linkWorkspacePackages
,useNodeVersion
,peerDependencyRules
etc. :contentReference[oaicite:19]{index=19}
Resumo rápido:
- O que é: gerenciador de pacotes rápido e eficiente para Node.js.
- Diferencial: uso otimizado de disco e instalação em camadas.
- Vantagens: performance, economia de espaço, confiabilidade.
- Uso: instalação flexível, comandos similares ao npm.
- Configuração: ideal para monorepos, com recursos avançados via config.