Модули 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 } заменяет переменную, и импортирующий код получает пустой объект.
Задание
ЛегкоСтарый файл legacy/stats.cjs написан в стиле CommonJS, с использованием module.exports. Используй его в notes.js, чтобы добавить команду stats.
- В
legacy/stats.cjsдопишиcountWords(notes). Функция получает массив заметок и возвращает общее количество слов во всех заметках. Слова разделяются пробелами. Для трёх начальных заметокBuy milk,Call AdaиWater the plantsона возвращает7. Для пустого массива она возвращает0. - В
notes.jsимпортируй файл с помощьюimport stats from './legacy/stats.cjs'. Это файл CommonJS, поэтомуstats— это объектmodule.exports, а функция —stats.countWords. - Добавь команду
statsв цепочку перед последнимelse. Она выводит одну строку: количество заметок, затем количество слов.3 notes, 7 wordswhereи остальные команды продолжают работать.
Попробуй: введи 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