I
I
Ilya Pirozhok2016-10-19 00:49:38
JavaScript
Ilya Pirozhok, 2016-10-19 00:49:38

Explain the difference and concepts of node.js modules?

I don't understand a little how module.exports works in node.js. I began to deal with webpack and this problem is very annoying.
1) What is the difference between:
module.exports = function () {} and exports.hello = hello ?
2) How many exports can and should be placed in a separate file?
3) What exactly does the exports object return?
4) Why can't I get to the function call a from another file in which this module is called on the next entry?:

module.exports = function() {
  var a = function() {
    console.log('Hello')
  }
}

Answer the question

In order to leave comments, you need to log in

3 answer(s)
M
Michael, 2016-10-19
@mak_ufo

1) module is a global object. Writing exports.hello = hello executes module.exports.hello = hello. Accordingly, if you need to export more than one module from a module, use exports.func = func. Otherwise, use module.exports = func
2) however you like. But it is more logical to store functions for working with dates, for example, in one file, for working with a database - in another
3) functions
you have a functions.js file:

const hello = (string) => {return 'Hello ' + string;}
exports.func = hello;

To use this function in another file, run:
const api = require('./functions.js');
api.func('name');

A
Alexander Aksentiev, 2016-10-19
@Sanasol

4. It is necessary to return an object with functions because. And you just designate a function inside the module, you can’t call it in any way.
https://www.sitepoint.com/understanding-module-exp...

D
Dmitry Belyaev, 2016-10-19
@bingo347

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;

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

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question