Menu
CoddyTech

Модули CommonJS

Часть раздела Основы Node.js путешествия по Node.js на Coddy. Урок 10 из 33.

Во многих фрагментах кода Node, которые вы встретите в пакетах npm и старых руководствах, используется другая система модулей.

В CommonJS экспортируют с помощью module.exports, а импортируют с помощью require. Файл с расширением .cjs всегда является файлом CommonJS, независимо от того, что используется в остальной части проекта, а import такого файла передаёт вам его объект module.exports как значение по умолчанию:

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

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

Изначально exports ссылается на тот же объект, что и module.exports. Выражение exports.hello = hello добавляет к нему свойство; exports = { hello } заменяет переменную, и импортирующий код получает пустой объект.

challenge icon

Задание

Легко

Старый файл legacy/stats.cjs написан в стиле CommonJS, с использованием module.exports. Используй его в notes.js, чтобы добавить команду stats.

  1. В legacy/stats.cjs допиши countWords(notes). Функция получает массив заметок и возвращает общее количество слов во всех заметках. Слова разделяются пробелами. Для трёх начальных заметок Buy milk, Call Ada и Water the plants она возвращает 7. Для пустого массива она возвращает 0.
  2. В notes.js импортируй файл с помощью import stats from './legacy/stats.cjs'. Это файл CommonJS, поэтому stats — это объект module.exports, а функция — stats.countWords.
  3. Добавь команду stats в цепочку перед последним else. Она выводит одну строку: количество заметок, затем количество слов.
    3 notes, 7 words
    where и остальные команды продолжают работать.

Попробуй: введи stats в поле после $ node notes.js и нажми Enter. Ты увидишь 3 notes, 7 words. Затем введи add Buy bread, а потом снова stats: ты по-прежнему увидишь 3 notes, 7 words, потому что хранилище забывает новые заметки после завершения программы.

Попробуйте сами

// Старый модуль, написанный в стиле CommonJS.
function countWords(notes) {
    // Верни общее количество слов во всех notes.
    return 0;
}

module.exports = { countWords };

Все уроки раздела Основы Node.js

Потренируйтесь самостоятельно: Песочница Express