Commonjs
Группа CommonJS определила формат модулей для решения проблем с областью видимости JavaScript, гарантируя, что каждый модуль выполняется в своём собственном пространстве имён.
Это достигается за счёт принудительного явного экспорта переменных, которые модуль хочет сделать доступными «вселенной», а также за счёт определения других модулей, необходимых для корректной работы.
Для этого CommonJS предоставляет два инструмента:
- функцию
require(), которая позволяет импортировать данный модуль в текущую область видимости. - объект
module, который позволяет экспортировать что-либо из текущей области видимости.
Обязательный пример “hello world”:
Простой JavaScript
Вот пример без CommonJS:
Мы определим значение в файле скрипта с именем salute.js. Этот скрипт будет содержать только значение, которое будет использовано в других скриптах:
// salute.js var MySalute = "Hello";
Теперь, во втором файле с именем world.js, мы будем использовать значение, определённое в salute.js.
// world.js var Result = MySalute + " world!";
Определения модулей
Как есть, world.js не будет работать, так как MySalute не определено. Нам нужно определить каждый скрипт как модуль:
// salute.js var MySalute = "Hello"; module.exports = MySalute;
// world.js var Result = MySalute + "hello world!"; module.exports = Result;
Здесь мы используем специальный объект module и помещаем ссылку на нашу переменную в module.exports, чтобы система модулей CommonJS знала, что это объект нашего модуля, который мы хотим показать миру. salute.js раскрывает MySalute, а world.js раскрывает Result.
Зависимость модулей
Мы близки, но всё ещё недостаёт шага: определение зависимостей. Мы уже определили каждый скрипт как независимый модуль, но world.js всё ещё нужно знать, кто определяет MySalute:
// salute.js var MySalute = "Hello"; module.exports = MySalute;
// world.js
var MySalute = require("./salute");
var Result = MySalute + "world!";
module.exports = Result;
Обратите внимание, что мы не использовали полное имя файла salute.js , а ./salute при вызове require, поэтому вы можете опустить расширение своих скриптов. ./ означает, что модуль salute находится в той же директории, что и модуль world.
Примеры
Функции
// moduleA.js
module.exports = function( value ){
return value*2;
}
// moduleB.js
var multiplyBy2 = require('./moduleA');
var result = multiplyBy2( 4 );
© 2012–2015 Tobias Koppers
Licensed under the MIT License.
https://webpack.github.io/docs/commonjs.html