2015-05-11 2 views
1

В узле JS, можно ли определить, какой скрипт запрашивает текущий модуль? Другими словами, кто , требующий текущего скрипта?получить ссылку файла сценария в nodejs

пример:

index.js запрашивает helper.js.

В helper.js, как можно console.log(some_referrer) == '/path/to/index.js')

ответ

2

Нет, это не возможно. Фактически helper.js может потребоваться из разных сценариев, но будет выполняться только один раз. Каждый раз, когда требуется другой сценарий, он просто возвращает все, что было присвоено module.exports с первого раза helper.js был включен напрямую, без выполнения helper.js.

Вы можете, однако, определить исходный сценарий, который был запущен, используя require.main. Это не скажет вам, требуется ли index.jsother.js, которому требуется helper.js или, index.js требуется helper.js напрямую. Но это говорит вам, что исходный скрипт, который был выполнен, был выполнен index.js.

Если вы хотите helper.js иметь различное поведение в зависимости от того, как она называется, вы можете также экспортировать функцию из helper.js и ожидать, что сценарий, который требует, чтобы функция для вызова его и передать его аргумент:

// helper.js 
module.exports = function (arg) { 
    // Use arg to determine which action to take. 
}; 


// index.js 
require('helper.js')(1); 


// other.js 
require('helper.js')('other'); 
1

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

Module1.js

console.log('required from --> ', require.main.filename);  

Module2.js

var module1 = require('./Module1'); 

Тогда EXEC.

$ node Module2 
$ required from --> /path/Module2.js 

Но если добавить

Module3.js

var module2 = require('./Module2'); 

Тогда.

$ node Module3 
$ required from --> /path/Module3.js 

Таким образом, в основном вы не можете, за исключением того, если скрипт вы выполняете (основной сценарий) тот же, который требует вашего Module1.

Смежные вопросы