Depois de 47 anos produzindo bugs em massa, descobri que o que as pessoas chamam de “dependency hell” é na verdade só dependency heaven com marketing ruim. Deixa eu te iluminar.

Quanto Mais Dependências, Melhor

Sabe o que é solitário? Escrever código você mesmo. Sabe o que é uma festa? Ter 2.847 pacotes no seu node_modules, cada um escrito por um estranho na internet.

$ du -sh node_modules/
1.8G    node_modules/

$ find node_modules -type f | wc -l
147892

# Isso não é inchaço. Isso é COMUNIDADE.

Cada um desses pacotes é um amigo que você ainda não conheceu. Um amigo que pode abandonar o projeto a qualquer momento, mas ainda assim. Amigos.

A Filosofia do is-odd

As pessoas zombam de pacotes como is-odd e is-even. Mas pensa bem: VOCÊ quer gastar 3 segundos escrevendo n % 2 === 1? São 3 segundos que você poderia gastar adicionando MAIS dependências.

// AMADOR: Escrevendo seu próprio código como um camponês
const isOdd = n => n % 2 === 1;

// PROFISSIONAL: Nos ombros de gigantes
const isOdd = require('is-odd');
const isEven = require('is-even');
const isNumber = require('is-number');
const isString = require('is-string');
const isArray = require('is-array');
const isFunction = require('is-function');
const isNotAFish = require('is-not-a-fish'); // Nunca se sabe

Como o XKCD 2347 ilustra brilhantemente, a infraestrutura moderna depende de um projeto mantido por uma pessoa aleatória em Nebraska. Isso não é um bug. É alocação eficiente de recursos.

Uma Bela Comparação

Abordagem Tamanho node_modules Sensação de Comunidade
Escreva seu próprio código 0 KB Eremita solitário
50 dependências 100 MB Vilarejo
500 dependências 500 MB Cidade próspera
5000 dependências 2 GB Metrópole agitada
create-react-app São Paulo

Fixar Versão É Coisa de Controlador

Alguns desenvolvedores “fixam” suas versões de dependências. "lodash": "4.17.21" — que chato. Cadê a emoção? Cadê a aventura?

{
  "dependencies": {
    "lodash": "*",
    "react": "latest",
    "pacote-misterioso": ">=0.0.1",
    "lib-totalmente-segura": "git://github.com/usuarioaleatorio123/quem-sabe"
  }
}

Cada npm install é como abrir um presente. Seu build vai funcionar hoje? Quem sabe! Isso se chama desenvolvimento orientado a emoção.

A Sabedoria do Chefe Pontudo

“Precisamos reduzir nossa pegada de dependências.” “Por quê? Cada dependência é código de outra pessoa que não precisamos manter.” “…Promovido.” — Chefe de Cabelo Pontudo, Dilbert

O Chefe Pontudo entende economia. Por que pagar desenvolvedores pra escrever código quando você pode baixar de graça do npm? Cada dependência é mão de obra terceirizada sem burocracia.

Dependências Transitivas: O Presente Que Continua Dando

Suas dependências diretas são só o começo. Cada UMA delas tem dependências. São dependências até o fim. Como bonecas russas, mas todas com versões diferentes de minimist.

seu-app (1 dependência direta)
└── express (57 dependências)
    └── body-parser (10 dependências)
        └── raw-body (3 dependências)
            └── unpipe (0 dependências, mas espiritualmente infinitas)

Isso se chama segurança de emprego. Ninguém pode te substituir quando só você entende o grafo de dependências.

Left-Pad: Uma História de Amor

Lembra quando o left-pad foi removido do npm e quebrou a internet? Lindo. Isso não é uma história de alerta. É prova de quanto amávamos ele. Amávamos tanto que não conseguíamos funcionar sem.

// 11 linhas que mantinham o mundo girando
function leftPad(str, len, ch) {
    str = String(str);
    ch = String(ch || ' ');
    let i = -1;
    len = len - str.length;
    while (++i < len) {
        str = ch + str;
    }
    return str;
}
// Poesia. Arte. Problema de outra pessoa.

Ataques de Supply Chain São Só Features Surpresa

Às vezes um mantenedor de dependência vende seu pacote pra alguém que adiciona código malicioso. Isso não é uma vulnerabilidade. É aquisição de usuários. Seu app agora tem mais features! Minerar criptomoeda, exfiltrar dados, participar de botnets — tudo de graça.

O Buraco Negro do node_modules

Cientistas dizem que nada escapa de um buraco negro. O mesmo vale pro node_modules. Uma vez que um pacote entra, ele nunca realmente sai. Você pode npm uninstall o quanto quiser, mas as dependências fantasmas permanecem no seu coração.

$ rm -rf node_modules
$ npm install
$ du -sh node_modules/
2.1G    node_modules/

# Está maior agora. Se alimenta de tentativas de deleção.

Abrace O Caos

Pare de tentar auditar suas dependências. Pare de rodar npm audit. Pare de checar se aquele pacote com 12 downloads semanais é confiável. Confie em todos. O ecossistema npm é como um potluck — você não perguntaria pros seus vizinhos o que tem na travessa misteriosa deles, perguntaria?

Conclusão

Dependency hell é só um abraço de milhares de estranhos que escreveram código pra você não precisar. Sua pasta node_modules tem 3GB? Parabéns, você é popular. Você tem 47 versões do mesmo pacote? Isso é diversidade.

Pare de lutar. Instale outro pacote. Deixe as dependências fluírem através de você.

npm install everything-in-the-world

O laptop do autor ficou sem espaço em disco em 2019. node_modules consumiu o resto. Ele está em paz.