Fácil JavaScript

Exportando e importando uma função

Enunciado

Crie um módulo saudacao.mjs que exporta uma função dizerOla(nome) retornando "Olá, [nome]!". Depois, em main.mjs, importe e use essa função para exibir a saudação para "Maria".

Requisitos

  • O arquivo saudacao.mjs deve usar export na função.
  • O arquivo main.mjs deve importar a função com import.
  • A saída deve ser exatamente Olá, Maria!.

Código inicial

// saudacao.mjs
// TODO: exporte a função dizerOla

// main.mjs
// TODO: importe e chame dizerOla('Maria')

Saída esperada

Olá, Maria!
Ver dica

Use export function dizerOla(nome) { ... } no primeiro arquivo e import { dizerOla } from './saudacao.mjs'; no segundo.

Mostrar solução
// saudacao.mjs
export function dizerOla(nome) {
  return `Olá, ${nome}!`;
}
// main.mjs
import { dizerOla } from './saudacao.mjs';

console.log(dizerOla('Maria'));

Passo a passo

  1. No arquivo saudacao.mjs, declaramos a função dizerOla que recebe nome e retorna uma string formatada com template literal.
  2. A palavra-chave export antes de function torna essa função pública para outros módulos.
  3. No arquivo main.mjs, usamos import { dizerOla } from './saudacao.mjs'; para trazer a função. O caminho ./ indica que o arquivo está na mesma pasta.
  4. Chamamos dizerOla('Maria') e passamos o resultado para console.log, que imprime a saudação.

Por que funciona

O export cria um binding nomeado que pode ser importado por outros módulos. Como usamos exportação nomeada, o import precisa usar chaves {} com o mesmo nome. O caminho relativo ./saudacao.mjs é resolvido a partir do arquivo atual, garantindo que o módulo correto seja carregado.

Erros comuns

  • Esquecer a extensão .mjs: se o arquivo for .js e o package.json não tiver "type": "module", o Node.js tratará como CommonJS e dará erro de sintaxe. Use .mjs ou configure o package.json.
  • Usar import sem chaves para exportação nomeada: import dizerOla from './saudacao.mjs' falha porque não há export default. O correto é import { dizerOla }.
  • Caminho errado: import { dizerOla } from 'saudacao.mjs' (sem ./) faz o Node procurar em node_modules. Sempre use ./ para arquivos locais.

Outra forma de resolver

Poderia usar export default function dizerOla(nome) { ... } e importar sem chaves: import dizerOla from './saudacao.mjs';. Isso é preferível quando o módulo tem uma única exportação principal.

Saída esperada

Olá, Maria!