kamikadze1996
@kamikadze1996
{[]}

Объясните разницу и понятия модулей node.js?

Немного не понимаю как работает module.exports в node.js. Стал разбираться с webpack и эта проблема очень мешает.
1) В чем разница между:
module.exports = function () {} и exports.hello = hello ?
2) Сколько экспортов можно и желательно размещать в отдельном файле?
3) Что именно возвращает объект exports?
4) Почему при следующей записи я не могу добраться до вызова функции a из другого файла в котором этот модуль вызывается?:
module.exports = function() {
	var a = function() {
		console.log('Hello')
	}
}
  • Вопрос задан
  • 450 просмотров
Пригласить эксперта
Ответы на вопрос 3
mak_ufo
@mak_ufo
1) module - это глобальный объект. Прописывая exports.hello = hello, выполняется module.exports.hello = hello. Соответственно, если вам нужно их модуля экспортировать больше одного модуля, используйте exports.func = func. В противном случае пользуйтесь module.exports = func

2) как хотите. Но логичнее функции для работы с датой, например, хранить в одном файле, для работы с БД - в другом

3) функции
есть у вас файл functions.js:
const hello = (string) => {return 'Hello ' + string;}
exports.func = hello;


Чтобы воспользоваться этой функцией в другой файле выполните:
const api = require('./functions.js');
api.func('name');
Ответ написан
Комментировать
Sanasol
@Sanasol Куратор тега JavaScript
нельзя просто так взять и загуглить ошибку
4. Возвращать надо объект с функциями потому что. А у вас просто обозначается функция внутри модуля, вызвать её никак нельзя.

https://www.sitepoint.com/understanding-module-exp...
Ответ написан
Комментировать
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
module.exports изначально содержит пустой объект, exports - ссылка на этот же объект
Вы можете расширять этот объект свойствами, либо присвоить в module.exports что-то другое, только надо учитывать что exports в этом случае будет по-прежнему ссылаться на изначальный объект
После того как модуль отработал во вне вернется то что в самом конце оказалось в module.exports

Примерно все работает так:
Весь код модуля оборачивается в такую конструкцию:
(function(module, require, exports) {
// код модуля вставляется сюда
});

Когда Вы первый раз реквайрите модуль срабатывает примерно следующий код:
var module = new Module(pathToModuleFile);
var moduleFunction = loadCodeAndRunInVM(module.id);
moduleFunction(module, module.require, module.exports); //Выполнили модуль
cache[module.id] = module.exports;
return module.exports;

При повторном вызове просто отдается значение из кэша
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы