DEV Community

Cover image for Conheça o PNPM: o NPM mais rápido e com melhor desempenho
Ivan Trindade
Ivan Trindade

Posted on

Conheça o PNPM: o NPM mais rápido e com melhor desempenho

O npm (Node Package Manager), é um gerenciador de pacotes para o ecossistema JavaScript. Ele é usado para gerenciar e instalar bibliotecas e dependências em projetos JavaScript, como projetos Node.js.

Com o npm, os desenvolvedores podem instalar pacotes prontos para uso ou publicar seus próprios pacotes para compartilhar com a comunidade. Ele também fornece uma maneira fácil de gerenciar e atualizar as dependências de um projeto. O npm é instalado junto com o Node.js e pode ser usado a partir da linha de comando.

Nesse artigo, veremos como o pnpm difere do npm e os benefícios que você pode obter ao usar pnpm em vez do npm.

O que é o PNPM?

PNPM é um gerenciador de pacotes alternativo para Node.js, que significa “Performant NPM”.

O principal objetivo do PNPM é manter todos os pacotes em um armazenamento global (centralizado) e usá-los, se necessário, por outros projetos também, criando links físicos para ele.

Vantagens de usar PNPM sobre NPM

  • Economiza uma enorme quantidade de espaço em disco.
  • Leva menos tempo para instalar os pacotes.
  • Possui suporte embutido para repositórios mono.

Agora, vamos entender como as coisas funcionam na prática. Vamos visualizar duas aplicações para entender os conceitos por trás da cena.

Aqui está o arquivo package.json das duas aplicações:

{
"name": "application1",
"version": "0.0.0",
"private": true,
"main": "app.js",
"scripts": {
  "start": "node ./bin/www"
},
  "dependencies": {
    "cookie-parser": "~1.4.4",
    "csurf": "^1.10.0",
    "debug": "~2.6.9",
    "ejs": "~2.6.1",
    "express": "~4.16.1",
    "express-session": "^1.17.0"
  }
}
{
 “name”: “application2,
 “version”: 0.0.0,
 “private”: true,
 “main”: “app.js”,
 “scripts”: {
 “start”: “node ./bin/www”
 },
 “dependencies”: {
   “cookie-parser”: “~1.4.4,
   “csurf”: “^.10.0,
   “debug”: “~2.6.9,
   “powerbi-client”: “^.16.5,
   “rxjs”: “^.5.3
 }
}
Enter fullscreen mode Exit fullscreen mode

Instalação

Primeiramente, instalei o pnpm usando o npm executando o comando:

npm i -g pnpm
Enter fullscreen mode Exit fullscreen mode

Podemos testar se o pnpm foi instalado com sucesso executando:

pnpm -v
Enter fullscreen mode Exit fullscreen mode

Como o PNPM é diferente do NPM?

Para entender as diferenças em seu funcionamento, criei dois diretórios para npm e pnpm, ambos clonados com duas aplicações de amostra e instalei os pacotes separadamente em diretórios diferentes usando npm e pnpm.

npm

Aplicação 1:

trinity:~/npm-demo$ npm install
added 71 packages, and audited 72 packages in 1s
found 0 vulnerabilities
Enter fullscreen mode Exit fullscreen mode

Aplicação 2:

trinity:~/npm-demo2$ npm install
added 27 packages, and audited 28 packages in 9s
found 0 vulnerabilities
Enter fullscreen mode Exit fullscreen mode

Aqui, como você pode ver, diz que o npm instalou 71 pacotes em aplicação 1 e 27 pacotes em aplicação 2, o que está perfeitamente correto.

Mas, se você observar os arquivos package.json de ambas as asplicações anteriores, há três pacotes comuns em ambos.

Mesmo que a aplicação 2 exija algumas dependências já instaladas (no aplicação 1), não podemos reutilizar dependências já instaladas para outro projeto no npm.

pnpm

Aplicação 1:

trinity:~/pnpm-demo$ pnpm install
Packages: +67
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Packages are hard linked from the content-addressable store to the virtual store.
Content-addressable store is at: /home/ivan/.pnpm-store/v3
Virtual store is at:             node_modules/.pnpm
Progress: resolved 67, reused 0, downloaded 67, added 67, done
dependencies:
+ cookie-parser 1.4.6
+ csurf 1.11.0
+ debug 2.6.9 (4.3.3 is available)
+ ejs 2.6.2 (3.1.6 is available)
+ express 4.16.4 (4.17.2 is available)
+ express-session 1.17.2
Enter fullscreen mode Exit fullscreen mode

Aplicação 2:

trinity:~/pnpm-demo2$ pnpm install
Packages: +27
+++++++++++++++++++++++++++
Packages are hard linked from the content-addressable store to the virtual store.
 Content-addressable store is at: /home/ivan/.pnpm-store/v3
 Virtual store is at: node_modules/.pnpm
dependencies:
+ cookie-parser 1.4.6
+ csurf 1.11.0
+ debug 2.6.9 (4.3.3 is available)
+ powerbi-client 2.19.1
+ rxjs 6.6.7 (7.5.2 is available)
Progress: resolved 27, reused 18, downloaded 9, added 27, done
Enter fullscreen mode Exit fullscreen mode

A partir da saída, podemos observar que o pnpm instalou 67 pacotes em aplicação e 27 pacotes em aplicação 2. Mas se você observar a última linha na saída - progress: reutilizou 18 pacotes já instalados para aplicação 1.

“No pnpm, os pacotes são sempre reutilizados se já estiverem instalados para outro projeto, economizando muito espaço em disco, o que o torna mais rápido e eficiente que o npm.”

Isso é ótimo!

Mas onde esses pacotes são armazenados?

Com a instalação do pnpm, especialmente esta linha na saída, “Os pacotes são vinculados fisicamente da loja endereçável de conteúdo à loja virtual”, diz muito sobre como funciona.

O armazenamento endereçável de conteúdo é um mecanismo de armazenamento em que os dados são armazenados no disco rígido, atribuindo um local permanente e endereçando-o com um identificador exclusivo.

Na captura de tela em anexo, você pode ver um diretório oculto chamado “.pnpm-store” criado dentro do seu diretório pessoal.

Na captura de tela, você pode ver um diretório oculto chamado “.pnpm-store” criado dentro do seu diretório pessoal.

Arquivos ocultos podem ser arquivos de sistema ou aplicações armazenadas no disco rígido com um local permanente e estão ocultos para evitar alterações acidentais.

Este diretório oculto — .pnpm-store é chamado de “armazenamento endereçável de conteúdo”, onde todas as dependências baixadas são armazenadas.

Sempre que você estiver baixando dependências, o pnpm primeiro verifica se essa dependência está disponível neste armazenamento ou não.

Hard link é apenas a cópia exata do arquivo original que também se refere ao mesmo local (do arquivo original) no disco rígido.

Se a dependência já estiver presente nesse armazenamento, o pnpm recupera a mesma criando um link físico.

“Os arquivos são recuperados do armazenamento com base em seu conteúdo, não por seu nome”

Conclusão

Essa foi uma breve introdução ao pnpm, como ele difere do npm e os benefícios que você pode obter ao usar o pnpm em vez do npm.

Você já tentou pnpm antes? Quais são seus pensamentos? Certifique-se de nos informar nos comentários. Obrigado por ler!

Top comments (2)

Collapse
 
fabiolamalves profile image
Fabiola Alves

Boa dica! Vou usar...

Collapse
 
zacrodrigues profile image
Zac Rodrigues

Ótimo conteúdo!
Esclareceu minhas dúvida.