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}
  • Corepack (recomendado com Node.js modernos):
    • corepack enable pnpm
    • corepack use pnpm@latest-10 (fixa versão no package.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 (ou pnpm 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}
  • pnpm add <pacote>: instala dependência. Por padrão, como dependencies; 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 diretamente pnpm <script>; pnpm add, pnpm install etc. :contentReference[oaicite:14]{index=14}

Configuração e Workspaces

  • Arquivo pnpm-workspace.yaml e configs globais com pnpm 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.