Trilha de Backend (JS) Pt.2
Estou atualizando meus conhecimentos de backend e resolvi escrever vários artigos com meu próprio entendimento do que está sendo estudado.
2. Módulos no Node e Tree Shaking
No Node.js temos dois sistemas principais de módulo: CommonJS (CJS) e ECMAScript Modules (ESM).
2.1. CommonJS (CJS) — O Padrão “Clássico”
O CommonJS foi o sistema original e padrão do Node.js por muitos anos.
- Sintaxe: Usa
require()para importar módulos emodule.exportspara exportar. - Carregamento Síncrono: Quando você usa
require(), o Node.js pausa a execução do arquivo atual até que o módulo seja totalmente carregado. - Uso: Comum em projetos Node.js mais antigos e em muitas bibliotecas publicadas no NPM.
Exemplo de Sintaxe:
// Exportando
module.exports = {
nome: "Meu Modulo CJS"
};
// Importando
const meuModulo = require('./meuModulo');2.2. ES Modules (ESM) — O Padrão Moderno
Get Anandarafaele’s stories in your inbox
Join Medium for free to get updates from this writer.
Os ES Modules são o padrão oficial do JavaScript moderno (ES6+) e são a escolha preferida para novos projetos Node.js e TypeScript.
- Sintaxe: Usa
import ... from ...eexport .... - Carregamento Assíncrono: As importações são carregadas de forma assíncrona, em paralelo, sem bloquear a linha de execução principal.
- Uso: É necessário adicionar
"type": "module"no seu arquivopackage.jsonpara usar esta sintaxe nativamente no Node.js.
Exemplo de Sintaxe:
// Exportando
export const nome = "Meu Modulo ESM";
// Importando
import { nome } from './meuModulo';2.3. Otimização: O Tree-Shaking
A principal vantagem de usar ES Modules vai além da sintaxe: é a capacidade de usar uma técnica de otimização chamada Tree-Shaking (sacudir a árvore).
O tree-shaking depende de ferramentas de bundling (empacotadores de módulos), como Webpack, Rollup e Vite, para funcionar.
Como funciona na prática?
O tree-shaking otimiza o pacote final do seu código, mantendo apenas as partes dos módulos importados que estão sendo realmente usadas e removendo o “código morto” (não utilizado).
Considere o exemplo a seguir:
Arquivo: utils.js
export function somar(a, b) { return a + b; }
export function subtrair(a, b) { return a - b; }
export function multiplicar(a, b) { return a * b; } // Exportado, mas não usadoArquivo: app.js
import { somar, subtrair } from './utils';
console.log(somar(1, 2));
// A função multiplicar() nunca é mencionada aqui.Resultado Final:
No seu pacote de produção final, o código da função multiplicar() será automaticamente removido. O tree-shaking garante que você envie apenas o código essencial para o usuário, resultando em aplicativos mais rápidos e leves.






