Как стать автором
Обновить

Комментарии 6

Есть ли смысл сейчас изучать внутренности require, ведь грядут нативные модули во все поля?

// или даже так, что вместе с предыдущими строчками
// в одном модуле не сработает!
module.exports = function() { return "I have not a name"; }

Конечно не сработает, мы же только что переписали значение переменной целиком. Все равно что сделать:
global.answer = 42;
myVar = {answer: 24}

и удивляться, что a.answer !== 42
А так сработоет:

в модуле

module.exports = function() { return «I have not a name»; }
module.exports.abc = ['a', 'b', '!'];

далее в другом файле

var f = require('./module.js');

var str = f();
str += f.abc[2];

console.log(str); // печатает: I have not a name!

Что мне и было нужно.

Рад, что у Вас не возникает таких заморочек )
Правильно, так работает. Это эквивалентно такому:

function myFunction () { return "I have not a name"; }
myFunction.abc = ['a', 'b', '!'];

module.exports = myFunction;

Мы не переписываем значение module.exports, а создаем новое поле в этом объекте.
thenodeway.io/posts/how-require-actually-works
Вообще, советую прочитать полностью всё что есть на этом сайте. Благо там не так уж и много всего.

Единственная мысль, которая была подмечена правильно: нужно стараться использовать только module.exports. А в остальном — всё плохо…
у меня код который автоматически «реквайрит» все файлы из указанной папки, код работает все ок, НО как использовать в файле в который реквайрится модуль, его экспортированную функцию, если нет var foo = require бла-бла-бла !?

function test(params) {
    console.log('тестовый модуль из папки модулей успешно required');

}

module.exports._test = test;
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории