Menu
CoddyTech

Módulos CommonJS

Parte da seção Fundamentos de Node.js do Journey de Node.js da Coddy. Lição 10 de 33.

Boa parte do código Node que você vai ler em pacotes npm e tutoriais mais antigos usa outro sistema de módulos.

CommonJS exporta com module.exports e importa com require. Um arquivo que termina em .cjs é sempre CommonJS, independentemente do restante do projeto, e um import desse tipo de arquivo fornece o objeto module.exports como padrão:

// greet.cjs
function hello(name) {
    return 'Hello, ' + name;
}
module.exports = { hello };

// app.js
import greet from './greet.cjs';
console.log(greet.hello('Ada'));

exports começa sendo o mesmo objeto que module.exports. exports.hello = hello adiciona uma propriedade a ele; exports = { hello } substitui a variável, e quem importa recebe um objeto vazio.

challenge icon

Desafio

Fácil

Um arquivo mais antigo, legacy/stats.cjs, foi escrito do jeito CommonJS, com module.exports. Use-o em notes.js para adicionar um comando stats.

  1. Em legacy/stats.cjs, termine countWords(notes). Ele recebe o array de notas e retorna quantas palavras há no total, contando todas as notas. As palavras são separadas por espaços. Para as três notas iniciais, Buy milk, Call Ada e Water the plants, ele retorna 7. Para um array vazio, retorna 0.
  2. Em notes.js, importe o arquivo com import stats from './legacy/stats.cjs'. Ele é um arquivo CommonJS, então stats é o objeto module.exports, e a função é stats.countWords.
  3. Adicione um comando stats à cadeia, antes do else final. Ele exibe uma linha: o número de notas, depois o número de palavras.
    3 notes, 7 words
    where e os outros comandos continuam funcionando.

Experimente: digite stats na caixa depois de $ node notes.js e pressione Enter. Você verá 3 notes, 7 words. Depois, digite add Buy bread e, em seguida, stats novamente: você ainda verá 3 notes, 7 words, porque o armazenamento esquece as notas novas quando o programa termina.

Experimente você mesmo

// Um módulo mais antigo, escrito no estilo CommonJS.
function countWords(notes) {
    // Retorne o número total de palavras em todas as notas.
    return 0;
}

module.exports = { countWords };

Todas as lições de Fundamentos de Node.js

Pratique por conta própria: Playground de Express