Anos atrás, eu estava entre o NPM e o Yarn, uma questão comum entre desenvolvedores Node.js. Eu sempre mantive ambos instalados e depois de uma melhoria de performance no NPM, o Yarn virou plano B, “se o NPM falhar bora de Yarn”.
Em busca de conhecimento 👽, encontrei o PNPM há algum tempo e resolvi testá-lo. Notei uma melhoria gigante na instalação de pacotes e o mais interessante é que essa estratégia aprimorada de reuso de pacotes do projeto, reduz o espaço em disco consumido pelos pacotes.
PNPM
É um gerenciador de pacotes que lida com instalação, atualização e remoção de pacotes. Esses pacotes contêm principalmente JavaScript/Typescript e assets utilizados por seus diversos bundlers. Assim como Yarn o registry NPM é usado pelo PNPM.
Melhorias
Redução no tempo de instalação e tamanhos dos pacotes são pontos positivos do PNPM, essas características ajudam e muito, desde a criação de imagens de container até o ambiente de desenvolvimento.
Hoje em dia instalamos um pacote NPM que instala uma dependência que tem outra dependência e você acaba colocando tanta coisa no seu projeto que só percebe no seu lock file.

Por que o PNPM?
Não estou dizendo que devemos parar de usar Yarn ou NPM, ambos funcionam, mas quando há aqueles projetos com vários pacotes e usando um bundler com diversas dependências enraizadas e comuns…
Podemos dizer que com o PNPM, seus problemas acabaram e eu agarantio…

Quem utiliza o PNPM?
O projeto é bem maduro e utilizado por grandes empresas.

Instalando PNPM
Bora vamos instalar o PNPM, existem vários métodos disponíveis, como em todo ambiente Node.js, o NPM já está instalado, podemos instalá-lo através dele assim como o Yarn ou uma instalação desvinculada.
# powershell (windows)
iwr https://get.pnpm.io/install.ps1 -useb | iex
# using curl
curl -fsSL https://get.pnpm.io/install.sh | sh -
# using wget
wget -qO- https://get.pnpm.io/install.sh | sh -
# using npm
npm install -g pnpm
Testes
Abaixo iremos testar a instalação da biblioteca React e suas dependências:
mkdir /tmp/pnpm-test
cd /tmp/pnpm-test
npm init -y foo bar
pnpm install react @testing-library/react @testing-library/jest-dom
O comando abaixo lista links simbólicos, ou seja, uma forma de validar o reuso de pacotes no projeto.
ls -lhaF node_modules | grep ^l
As bibliotecas usadas tem o React como um pacote comum, que será reutilizado, o que é uma das estratégias do PNPM para tornar o processo de instalação mais rápido e reduzindo o uso do armazenamento, conforme mencionado anteriormente, os pacotes serão armazenados uma única vez, abaixo temos uma referência de link simbólico para node_modules/react.
.pnpm/[email protected]/node_modules/react/
Não que eu goste de projetos que compartilham uma lista enorme de dependências, mas os benefícios são ainda maiores com o PNPM.
Performance
O site oficial do PNPM fornece benchmarks entre gerenciadores de pacotes, recursos e tempos de execução.
Compatibilidade
O PNPM é compatível com o [Node](https://nodejs.org/en)[.js](Node.js) desde a versão 16x, hoje estamos na versão 18x como LTS, segue abaixo uma tabela de compatibilidade considerando a versão *LTS *como partida.
| Node.js | pnpm 5 | pnpm 6 | pnpm 7 | pnpm 8 |
|---|---|---|---|---|
| 18 | ? | ✅ | ✅ | ✅ |
| 20 | ? | ? | ✅ | ✅ |
Recursos
Esta lista de recursos e comparação foram retiradas do site oficial.
| Feature | pnpm | Yarn | npm |
|---|---|---|---|
| Workspace support | ✔️ | ✔️ | ✔️ |
Isolated node_modules | ✔️ – The default | ✔️ | ✔️ |
Hoisted node_modules | ✔️ | ✔️ | ✔️ – The default |
| Autoinstalling peers | ✔️ | ❌ | ✔️ |
| Plug’n’Play | ✔️ | ✔️ – The default | ❌ |
| Zero-Installs | ❌ | ✔️ | ❌ |
| Patching dependencies | ✔️ | ✔️ | ❌ |
| Managing Node.js versions | ✔️ | ❌ | ❌ |
| Has a lockfile | ✔️ – pnpm-lock.yaml | ✔️ – yarn.lock | ✔️ – package-lock.json |
| Overrides support | ✔️ | ✔️ – via resolutions | ✔️ |
| Content-addressable storage | ✔️ | ❌ | ❌ |
| Dynamic package execution | ✔️ – via pnpm dlx | ✔️ – via yarn dlx | ✔️ – via npx |
| Side-effects cache | ✔️ | ❌ | ❌ |
| Listing licenses | ✔️ – via pnpm licenses list | ✔️ – via a plugin | ❌ |
Principais comandos
| pnpm | npm | yarn |
|---|---|---|
pnpm install | npm install | yarn install |
pnpm install react | npm install react | yarn add react |
pnpm uninstall react | npm uninstall react | yarn remove react |
pnpm store prune | npm cache clean --force | yarn cache clean |
Maiores informações na documentação oficial.
Fim!
O objetivo deste artigo foi demonstrar uma opção rápida de gerenciar seus pacotes, estejam eles instalados em seu ambiente de desenvolvimento ou em seu container. Outra vantagem é que o lock file PNPM possui sintaxe yaml, o que torna o arquivo mais fácil de ler em minha humilde opinião.
Deus abenç️️oe 🕊️ uma excelente semana para você! ️
Mantenha seu kernel 🧠 atualizado.




