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.