Dividir o código em módulos
Uma aplicação real não cabe em um arquivo. O Node permite separar o código em módulos (arquivos) que exportam e importam funcionalidade. Existem dois sistemas que vão conviver por muito tempo.
CommonJS (o clássico do Node)
Usa require para importar e module.exports para exportar:
// matematica.js
function somar(a, b) { return a + b; }
module.exports = { somar };
// app.js
const { somar } = require("./matematica");
console.log(somar(2, 3)); // 5
ES Modules (o padrão moderno)
É a sintaxe padrão da linguagem, a mesma do navegador. Usa
import / export:
// matematica.js
export function somar(a, b) { return a + b; }
// app.js
import { somar } from "./matematica.js";
Para usar ESM no Node coloca-se "type": "module" no package.json (ou usa-se
a extensão .mjs). Diferenças-chave: require é síncrono e dinâmico
(você pode chamá-lo dentro de um if); import é estático (resolve-se antes
de executar) e permite otimizações.
package.json e npm
O package.json é a ficha do projeto: nome, versão, scripts e
dependências. Com o npm (o gerenciador de pacotes do Node) você instala bibliotecas:
{
"name": "meu-app",
"type": "module",
"scripts": { "start": "node app.js" },
"dependencies": { "express": "^4.18.0" }
}
npm install express baixa o pacote para node_modules e o registra em
dependencies. Depois você o importa pelo nome: import express from "express".
A biblioteca padrão
O Node traz módulos integrados (não precisa instalá-los):
fs: ler e escrever arquivos (file system).path: construir caminhos de forma portável entre sistemas operacionais.os: informação do sistema (CPUs, memória...).http: criar servidores e clientes HTTP.process.env: ler variáveis de ambiente (configuração e segredos).
Exemplos
Importar um módulo da biblioteca padrão (CommonJS)
const path = require("path");
console.log(path.join("pasta", "arquivo.txt")); // "pasta/arquivo.txt"
console.log(path.extname("foto.png")); // ".png"