Pare de instalar esses pacotes npm — o Node.js já faz isso por você 😱
Lembra quando tudo que você queria fazer no Node.js exigia instalar mais um pacote? Pois é… essa era tá ficando pra trás.
As versões mais recentes do Node trouxeram funções nativas incríveis que substituem libs superpopulares.
E o melhor? Sem precisar instalar nada.
Depois de anos montando ambientes e raspando dependências, ver o node_modules finalmente emagrecer é quase terapêutico.
Vem comigo descobrir tudo o que agora o Node faz sozinho!
🎯 TypeScript nativo
Desde o Node 22.6, dá pra rodar TypeScript direto, sem ts-node, tsx, nem build manual:
node --experimental-strip-types server.ts
E no Node 23+, nem precisa mais da flag!
Só lembra: isso só executa, não checa tipos. Ainda vale rodar tsc --noEmit pra validar.
interface User {
id: string
name: string
}
const createUser = (data: User) => data
const user = createUser({ id: '1', name: 'Alice' })
console.log(user)
🌐 node-fetch → fetch()
O fetch() agora é global no Node.js desde a versão 18.
Sem libs, sem import, sem sofrimento.
const response = await fetch('https://api.example.com/data')
const result = await response.json()
console.log(result)
🔑 uuid → crypto.randomUUID()
Adeus à lib com 2 bilhões de downloads por semana.
Agora o Node gera UUID com uma função nativa do módulo crypto:
import { randomUUID } from 'node:crypto'
const id = randomUUID()
console.log(id) // Exemplo: "b7e59a20-7d62-4dda-ae32-71a55ccf1c57"
📁 glob → fs.glob()
Quer listar arquivos com padrão?
O fs.glob() chegou no Node 22 pra isso.
import { glob } from 'node:fs/promises'
const arquivos = await glob('src/**/*.ts', {
ignore: 'node_modules/**'
})
console.log(arquivos)
🧨 rimraf → fs.rm({ recursive: true })
Pra remover diretórios inteiros:
import { rm } from 'node:fs/promises'
await rm('dist', { recursive: true, force: true })
console.log('Pasta removida!')
📂 mkdirp → fs.mkdir({ recursive: true })
Criar pastas aninhadas ficou fácil:
import { mkdir } from 'node:fs/promises'
await mkdir('logs/app/errors', { recursive: true })
console.log('Diretórios criados com sucesso!')
⚙️ dotenv → --env-file
Você pode carregar variáveis de ambiente direto da CLI:
node --env-file=.env app.js
node --env-file=.env --env-file=.env.local app.ts
Arquivo .env:
PORT=3000
DATABASE_URL=mysql://root@localhost/test
console.log(process.env.PORT) // 3000
🔁 nodemon → --watch
Recarregue automaticamente sem instalar nada:
node --watch server.ts
E sim, dá pra combinar com TypeScript:
node --watch --experimental-strip-types server.ts
🧪 jest / mocha → Node Test Runner
O Node tem test runner nativo (desde a versão 20), com describe, it e asserts prontos pra uso:
import { describe, it } from 'node:test'
import assert from 'node:assert'
describe('soma()', () => {
it('deve somar dois números', () => {
const soma = (a: number, b: number) => a + b
assert.strictEqual(soma(2, 3), 5)
})
})
Rodar o teste:
node --test
🎨 chalk / kleur → util.styleText()
O novo util.styleText() dá cor e estilo pro terminal:
import { styleText } from 'node:util'
console.log(styleText('blue', 'Tudo certo!'))
console.log(styleText(['bold', 'red'], 'Deu ruim!'))
💨 readable-stream → módulos nativos do stream
Streams modernas com suporte a Promises:
import { pipeline } from 'node:stream/promises'
import { createReadStream, createWriteStream } from 'node:fs'
await pipeline(
createReadStream('entrada.txt'),
createWriteStream('saida.txt')
)
console.log('Arquivo copiado!')
🧱 better-sqlite3 / sqlite3 → node:sqlite (experimental)
Já pode brincar com banco SQLite sem instalar nada:
import { DatabaseSync } from 'node:sqlite'
const db = new DatabaseSync(':memory:')
db.exec('CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)')
db.exec("INSERT INTO users (name) VALUES ('Alice')")
const rows = db.prepare('SELECT * FROM users').all()
console.log(rows)
⚡ Extra: config do TypeScript
Se quiser um tsconfig.json minimalista pra rodar nativo:
{
"compilerOptions": {
"module": "NodeNext",
"moduleResolution": "NodeNext",
"noEmit": true,
"target": "ES2022",
"esModuleInterop": true
}
}
🚀 Conclusão
O Node.js tá gigante.
O que antes exigia dezenas de libs, hoje roda nativo, mais rápido e mais bonito.
E com o TypeScript rodando direto no core, o ecossistema JavaScript tá ficando cada vez mais maduro.
Claro que libs como axios ou tsx ainda têm seu espaço — mas é hora de ver o quanto dá pra simplificar.
Então antes de rodar aquele npm install, pensa bem:
Será que o Node já não faz isso sozinho?
Teu futuro eu (e teu disk usage) vão te agradecer. 😎
🔥 Gostou do artigo?
Dá aquele UP, comenta o que achou e compartilha com a galera dev!
Vamos espalhar a palavra do node_modules magro! 💪
#NodeJS #TypeScript #Backend #JavaScript #CleanCode #DesenvolvimentoWeb #OpenSource