Подтвердить что ты не робот

Каково использование module.parent в node.js? Как я могу обратиться к модулю require()?

Я смотрел в node.js module документацию и заметил, что каждый модуль имеет свойство module.parent. Я попытался использовать его, но сжег модуль кэширования - module.parent только когда-либо кажется модулю, который сначала требует() 'd it, независимо от текущего контекста.

Так в чем его использование? Есть ли другой способ для меня получить ссылку на текущий модуль require()? Прямо сейчас я обертываю модуль в функцию, так что он вызывается как:

require("mylibrary")(module)

но это кажется субоптимальным.

4b9b3361

Ответ 1

"parent" - это модуль, который вызвал интерпретацию script (и кеширования), если таковой имеется:

// $ node foo.js
console.log(module.parent); // `null`
// require('./foo')
console.log(module.parent); // `{ ... }`

То, что вы ожидаете, это "вызывающий", который Node не сохраняет для вас. Для этого вам понадобится экспортированная функция, которую вы используете в настоящее время, для закрытия значения.

Ответ 2

Существует обходное решение для этого. Node добавляет модуль в кэш модуля до того, как он закончит его загрузку. Это означает, что модуль может удалять себя из кеша модуля во время загрузки! Затем каждый раз, когда модуль require 'd загружается новый экземпляр модуля.

Magic.js

console.log('Required by ' + module.parent.filename);
delete require.cache[__filename];

Module1.js

//prints "Required by Module1.js"
require('./Magic');

Module2.js

//prints "Required by Module2.js"
require('./Magic');

Конечно, побочным эффектом этого является то, что ваш модуль больше не является одиночным, поэтому вам нужно закодировать Magic.js с учетом этого. Если вам нужно хранить глобальные данные, вы всегда можете сохранить их в модуле require(), который не удаляет себя из кеша.