Что такое CommonJS? CommonJS — это система форматирования модулей. Это стандарт структурирования и организации кода JavaScript. CJS помогает в разработке приложений на стороне сервера, и его формат сильно повлиял на управление модулями NodeJS.
Итак, что такое модуль? Модуль — это просто фрагмент кода, инкапсулированный в файл и экспортированный в другой файл. Модули сосредоточены на одной части функциональности и остаются слабо связанными с другими элементами приложения. Это связано с тем, что между модулями нет глобальных или общих переменных, поскольку они взаимодействуют только через объект module.exports. Любой код, который вы хотите сделать доступным в другом файле, может быть модулем!
CommonJS оборачивает каждый модуль в функцию с именем «require» и включает объект с именем «module.exports», который экспортирует код доступности для других модулей. Все, что вам нужно сделать, это добавить все, что вы хотите сделать доступным для других файлов, в объект «экспорт» и потребовать модуль в зависимом файле. синтаксис функции require:
var VariableName = require('moduleId_or_pathToModule');
Пример:
// lib.js const PI = 3.1415926; // add values function sum(...args) { log('sum', args); return args.reduce((num, tot) => tot + num); } // multiply values function mult(...args) { log('mult', args); return args.reduce((num, tot) => tot * num); } // private logging function function log(...msg) { console.log(...msg); } module.exports = { PI, sum, mult };
Пример подключения:
const { sum, mult } = require('./lib.js'); console.log( sum(1,2,3,4) ); // 10 console.log( mult(1,2,3,4) ); // 24
или
const lib = require('./lib.js');
Пример модуля экспортирующего класс:
class MyClass {} module.exports = MyClass;
После подключения такого класса, можем создать объект:
const MyNewClass = require('myclass.js'), myObj = new MyNewClass();
CommonJS позволяет динамически формировать имя файла и подгружать его, и также импортировать (import) JSON данные в JavaScript object. Пример:
const file = `data${ Math.round(Math.random() * 3) }.json`, data = require(file); console.log( data.propertyOne || 'propertyOne not set' );
Асинхронные вызовы должны быть заключены в немедленно вызываемое функциональное выражение (IIFE) — функцию, которая запускается, как только она определена. Например:
function waitOneSec() { return new Promise( (resolve) => setTimeout(resolve, 1000)); } (async () => { await waitOneSec(); })();CommonJS был стандартом для модулей Node.js до тех пор, пока не появился ES2015.