Как использовать require внутри модуля с родительским контекстом? - PullRequest
1 голос
/ 12 марта 2019

app.js

require('./modules/mod');

модули / мода / mod.js

modules.exports = () => {
   require('./modules/secondmodule');
}

По сути, я хочу, чтобы приведенный выше код мог требовать модули, но используя тот же контекст, из которого был вызван сам, например, другой модуль в той же папке, без использования относительных путей.

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

редактирование:

С тех пор я обнаружил, что могу использовать require.parent.module, и похоже, что он работает. Пожалуйста, дайте мне знать, если это не рекомендуется.

Ответы [ 2 ]

1 голос
/ 13 марта 2019

require использует пути относительно текущего модуля.Это можно сделать, предоставив require из родительского модуля:

modules.exports = parentRequire => {
   parentRequire('./modules/secondmodule');
}

, который используется как:

require('./modules/mod')(require);

Вместо этого правильно использовать относительные модули, потому что дочерний модуль не должензнать контекст, в котором он оценивается:

require('../secondmodule');

В случае, если mod необходимо отделить от secondmodule, ему могут быть предоставлены зависимости с помощью некоторого общего шаблона, например внедрения зависимости или поиска службы.

0 голосов
/ 14 марта 2019

Дополнительный дополнительный ответ:

module.exports = () => {
   module.parent.require('./modules/secondmodule');
}
...