Turbinando a instalação dos pacotes NPM com o PNPM
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.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.
Time for feedback!