У меня есть модуль, который работает следующим образом:Node.js - Как получить относительные требуемые пути?
/helpers/importer/Import.js
function importer(requiredModulePath, toImport) {
requiredModulePath = requiredModulePath.replace('{env}', browser.params.env);
var requiredModule = require(requiredModulePath);
return requiredModule[toImport] || requiredModule.default || requiredModule;
}
module.exports = importer;
Я использую это для импорта свойств модуля динамически, например, следующий модуль «URL»:
/example/URLs.js
module.exports = {
default: 'http://google.com',
a: 'http://a.com',
b: 'http://c.com'
};
И я делаю это так:
/example/myExecutingModule.js
var Import = require('../helpers/importer/Import');
//var URL = Import('./URLs'); //This path does not work
var URL = Import('../../example/URLs'); //This path does work, as the URL is relative to Import.js
[ ... ]
Моя проблема в том, что, в отличие от всех остальных на переполнение стека, кто хочет абсолютные пути в их требует, я хочу противоположный. Я хотел бы указать тот же путь к моей функции импорта, которую я бы запросил, - тот, который относительно myExecutingModule.js, в этом случае: ./URLs. Тем не менее, похоже, что моя функция «импортера» закрывает функцию «требовать», которая относится к ее пути. Есть ли способ написать его так, что «require» будет относиться к модулю, вызывающему импортер()? По мере того, как я печатаю это, кажется, что единственный способ - передать «требовать» в модуль Import.js, который, как я чувствую, является ... смешным
EDIT: Подумав об этом дальше, я предполагаю, что ответ предполагает отказ Импортого закрытия за вызывающий модуль требует функций, например, так:
var Import = require('../helpers/Import')(require);
, а затем экспорт в Import.js будет
module.exports = function (require) { [...] return importer; };
причинения «требует» в функции импортера быть фактическая потребность в функции, которую должен был использовать вызывающий модуль. Я еще не пробовал этого, и я держусь за лучший ответ, поэтому я оставлю этот вопрос открытым на данный момент
Да, я считал что-то вроде этого, но это не позволяет мои пути передаются " Import.js "будет таким же, как те, которые были переданы в" require (str) ", т.е. Я специально хочу написать Import.js таким образом, что в этом примере работает «./URLs.js». Одна из причин, по которой я хочу этого, так это то, что моя среда IDE может определить, где находятся файлы в моей системе. Другое дело в том, что путь взаимозаменяем, использую ли я метод require() или моего модуля Import() –