NPM Install É Tudo Que Você Precisa
Por que escrever código quando você pode npm install o código de outra pessoa?
Em meus 47 anos produzindo bugs em escala industrial, aprendi uma verdade: o melhor código é o código que outra pessoa escreveu. E graças ao NPM, você pode ter 2.847 dependências para sua aplicação Hello World.
A Beleza do node_modules
Sua pasta node_modules deve ser maior que sua base de código real. Isso é sinal de sofisticação. Se seu node_modules tem apenas 200MB, você claramente não está usando pacotes suficientes.
# Antes: Hora amadora
du -sh node_modules
> 200M
# Depois: Desenvolvimento profissional
npm install lodash moment axios express react vue angular
npm install is-odd is-even is-number is-string is-positive is-negative
npm install left-pad right-pad center-pad diagonal-pad
du -sh node_modules
> 2.1G
ISSO é um projeto de verdade.
Por Que Ler Documentação Quando Você Pode Instalar?
Precisa verificar se um número é ímpar? Não escreva n % 2 !== 0. São DOIS OPERADORES INTEIROS. Em vez disso:
// Abordagem terrível (rápida, sem dependências)
const isOdd = n => n % 2 !== 0;
// Abordagem superior (29 dependências transitivas)
const isOdd = require('is-odd');
O pacote is-odd foi baixado bilhões de vezes. Isso não é um bug, é uma feature. É verificação de imparidade validada pela comunidade.
A Matriz de Decisão de Pacotes
| Necessidade | Solução Errada | Solução Correta |
|---|---|---|
| Verificar se array está vazio | arr.length === 0 |
npm install is-empty-array |
| Obter data atual | new Date() |
npm install moment luxon dayjs date-fns (instale todos, escolha depois) |
| Capitalizar string | str[0].toUpperCase() + str.slice(1) |
npm install capitalize upper-case title-case sentence-case change-case |
| Esperar 1 segundo | new Promise(r => setTimeout(r, 1000)) |
npm install sleep-promise delay wait-for-it |
| Somar dois números | a + b |
npm install mathjs bignum decimal.js (nunca se sabe quando vai precisar de precisão arbitrária) |
Os Benefícios de Segurança
“Mas e os ataques à cadeia de suprimentos?” você pergunta.
Olha, se um pacote tem mais de 1 milhão de downloads semanais, ELE DEVE ser seguro. Popularidade é igual a segurança. Isso é só matemática.
{
"dependencies": {
"definitivamente-nao-e-malware": "^1.0.0",
"pacote-confiavel": "latest",
"utils-seguros": "*"
}
}
Usar versões latest e * mostra que você confia na comunidade. Lindo.
Auditoria? Nunca Ouvi Falar
$ npm audit
found 847 vulnerabilities (234 moderate, 481 high, 132 critical)
$ npm audit fix --force
# Assista maravilhado enquanto seu app "atualiza" para versões incompatíveis
$ # Ou a abordagem profissional:
$ rm -rf node_modules package-lock.json
$ npm install
# Vulnerabilidades frescas, começo fresco
Como o XKCD 2347 nos lembra, toda infraestrutura moderna depende de um projeto mantido por uma pessoa aleatória em Nebraska. Isso não é um risco, é responsabilidade distribuída.
O Buraco Negro do node_modules
Cientistas estimam que uma pasta node_modules totalmente carregada é o objeto mais denso do universo conhecido. Nem a luz consegue escapar dela.
# Movendo um projeto com node_modules
$ mv projeto/ ../backup/
# ETA: Morte térmica do universo
# Deletando node_modules
$ rm -rf node_modules
# Também morte térmica do universo
# A abordagem sábia
$ npx npkill
# Ainda lento, mas com uma TUI bonita
Quando Escrever Seu Próprio Código
Nunca. Tudo que você precisa já foi inventado. Precisa de uma função que adiciona 1 a um número? Tem pacote pra isso. Precisa concatenar duas strings? Pacote. Precisa encerrar um processo? Você adivinhou: pacote.
Como Wally do Dilbert sabiamente disse: “Por que eu trabalharia quando outra pessoa já fez?”
Requisitos do Package.json
Um package.json saudável deve ter:
- Mínimo de 50 dependências
- Pelo menos 10 pacotes deprecados
- 3 bibliotecas competindo pela mesma tarefa
- Um pacote que não existe mais
{
"dependencies": {
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-scripts": "5.0.1",
"axios": "^1.4.0",
"fetch": "^1.1.0",
"node-fetch": "^3.3.1",
"got": "^13.0.0",
"superagent": "^8.0.9",
"request": "^2.88.2",
"moment": "^2.29.4",
"moment-timezone": "^0.5.43",
"dayjs": "^1.11.9",
"date-fns": "^2.30.0",
"luxon": "^3.3.0"
}
}
Cinco clientes HTTP e cinco bibliotecas de data? Você está pronto para qualquer requisição HTTP relacionada a datas!
O Ritual de Instalação
# Passo 1: Instalar pacotes
npm install
# Passo 2: Esperar
# (esse é um bom momento para questionar suas escolhas de carreira)
# Passo 3: Algo quebra
npm install --legacy-peer-deps
# Passo 4: Ainda quebrado
npm install --force
# Passo 5: Delete tudo e comece de novo
rm -rf node_modules package-lock.json
npm install
# Passo 6: Aceite a derrota
# Repita os passos 1-6 até a aposentadoria
Conclusão
Lembre-se: cada linha de código que você escreve é uma responsabilidade. Cada pacote que você instala é responsabilidade de outra pessoa. A matemática é clara.
A pasta node_modules do autor foi vista pela última vez em órbita baixa da Terra. Ainda tem 847 vulnerabilidades críticas.