Pular para o conteúdo principal
Versão: Next

pnpm vs npm

A estrutura plana do npm

O npm mantêm uma estrutura de dependências plana desde a versão 3. Isso faz com que menos espaço em disco seja utilizado, mas tem o efeito colateral de deixar a pasta node_modules bagunçada.

Por outro lado, pnpm gerencia node_modules utilizando hard links e links simbólicos, direcionados a um armazenamento global. Isso te dá os benefícios de bem menos uso de espaço em disco, enquanto mantém seu node_modules limpo. Há documentação acerca dolayout do armazenamento global se você quiser saber mais.

A coisa boa sobre a estrutura adequada do node_modules feita pelo pnpm é que "ela ajuda a evitar bugs" ao tornar impossível que sejam usados módulos não especificados no package.json do projeto.

Instalação

pnpm não permite a instalação de pacotes sem salvá-los no package.json. Se nenhum parâmetro for passado para pnpm add, pacotes são salvos como dependências. Assim como no npm, --save-dev e --save-optional podem ser utilizados para instalar pacotes como dependências de desenvolvimento ou opcionais.

Como consequência dessa limitação, projetos não terão nenhum pacote estranho ao usarem pnpm, a não ser que removam uma dependência e deixem-na órfã. Por isso que a implementação do pnpm do comando prune não permite que você especifique quais pacotes serão removidos - ele SEMPRE remove todos os pacotes estranhos e órfãos.

Dependências de diretório

Dependências de diretório começam com o prefixo file: e apontam para um diretório no sistema de arquivos. Assim como o npm, pnpm cria um link simbólico para essas dependências. Ao contrário do npm, pnpm não instala as dependências do arquivo.

Isso significa que se você tem um pacote chamado foo (<root>/foo) que tem bar@file:../bar como dependência, pnpm não irá instalar dependências de <root>/bar quando você executar pnpm install em foo.

Se você precisar executar instalações em vários pacotes ao mesmo tempo, como em um monorepo, você deve ver a documentação para pnpm -r.