Leodario.com

Leodario.com – Tudo sobre Tecnologia

Aula 20 – API JavaScript, Node.js e Express – CommonJS vs ES Modules – Sistemas de módulos

Imagem destacada da aula de API

Introdução (3 min)

Imagine uma biblioteca gigante, cheia de livros incríveis. Para organizar tudo, precisamos de um sistema de catalogação. Em programação, módulos são como esses livros, contendo funções e variáveis úteis. Os sistemas de módulos são o nosso sistema de catalogação, definindo como organizamos e acessamos esses “livros” de código. Em Node.js, temos dois sistemas principais: CommonJS e ES Modules. Dominá-los é essencial para construir APIs modernas, escaláveis e organizadas. Nesta aula, vamos criar dois módulos simples e aprender a importá-los e usá-los com ambos os sistemas.

Este conhecimento é fundamental no ecossistema Node.js/Express, permitindo a construção de aplicações robustas e modulares.

Conceito Fundamental (7 min)

CommonJS, usando require e module.exports, foi o sistema padrão do Node.js por muito tempo. Ele carrega os módulos de forma síncrona, ou seja, um após o outro. Isso funciona bem para aplicações server-side, mas pode ser menos eficiente para o front-end.

ES Modules (ESM), usando import e export, é o padrão moderno para JavaScript, tanto no front-end quanto no back-end. Ele permite o carregamento assíncrono de módulos, melhorando o desempenho em ambientes web. É suportado nativamente em navegadores modernos e, com configurações apropriadas, no Node.js também.

Em produção, a modularização possibilita o desenvolvimento de aplicações complexas divididas em partes menores e reutilizáveis. Imagine um sistema de e-commerce: você pode ter módulos separados para gerenciar usuários, produtos, pagamentos, etc.

Vantagens dos ES Modules:

    • Carregamento assíncrono, melhorando o desempenho.
    • Sintaxe mais clara e concisa.
    • Integração nativa com navegadores.

Desvantagens dos ES Modules (em relação ao contexto Node.js anterior à sua adoção completa):

    • Requer configuração específica em versões mais antigas do Node.js.

Implementação Prática (10 min)

CommonJS

// matematica.cjs
function somar(a, b) {
  return a + b;
}

function subtrair(a, b) { return a - b; }

module.exports = { somar, subtrair };

// app.js const matematica = require('./matematica.cjs');

console.log(matematica.somar(5, 3)); // Output: 8 console.log(matematica.subtrair(5, 3)); // Output: 2

ES Modules

// matematica.mjs
function somar(a, b) {
  return a + b;
}

function subtrair(a, b) { return a - b; }

export { somar, subtrair };

// app.mjs import { somar, subtrair } from './matematica.mjs';

console.log(somar(5, 3)); // Output: 8 console.log(subtrair(5, 3)); // Output: 2

Para executar o código ES Modules, certifique-se que o arquivo principal tem a extensão .mjs ou que o package.json contenha "type": "module".

node app.mjs 

Em um ambiente HostGator Plano M, essas configurações são compatíveis. Lembre-se de configurar seu ambiente corretamente para usar ES Modules no Node.js, se necessário.

Exercício Hands-On (5 min)

Crie um módulo chamado utilitarios.mjs com duas funções: converterParaMaiusculas(texto) e converterParaMinusculas(texto). Importe essas funções em um arquivo app.mjs e teste-as com diferentes strings.

Solução:

// utilitarios.mjs
export function converterParaMaiusculas(texto) {
  return texto.toUpperCase();
}

export function converterParaMinusculas(texto) { return texto.toLowerCase(); }

// app.mjs import { converterParaMaiusculas, converterParaMinusculas } from './utilitarios.mjs';

console.log(converterParaMaiusculas("olá mundo")); // Output: OLÁ MUNDO console.log(converterParaMinusculas("OLÁ MUNDO")); // Output: olá mundo

Para testar, execute node app.mjs. Se encontrar erros, verifique se a extensão dos arquivos está correta e se o seu ambiente Node.js está configurado para suportar ES Modules.

Próximos passos: explore diferentes maneiras de exportar e importar módulos, como export default e named exports. Pratique a modularização em seus projetos para construir aplicações mais organizadas e escaláveis.

🚀 Pronto para a próxima aula?

Continue sua jornada no desenvolvimento de APIs e domine Node.js & Express!

📚 Ver todas as aulas