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”
}
}
Instalação
Primeiramente, instalei o pnpm usando o npm executando o comando:
npm i -g pnpm
Podemos testar se o pnpm foi instalado com sucesso executando:
pnpm -v
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
Aplicação 2:
trinity:~/npm-demo2$ npm install
added 27 packages, and audited 28 packages in 9s
found 0 vulnerabilities
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
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
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, 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 (3)
Obrigado! Vou começar a usar
Boa dica! Vou usar...
Ótimo conteúdo!
Esclareceu minhas dúvida.