2015-05-30 6 views
3

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

A.js

var b = require('./B'); 
var c = require('./C'); 

console.log(module.children.length); // 2 

B.js

var z = require('Z'); 

console.log(module.children.length); // 1 

C.js

var z = require('Z'); 

console.log(module.children.length); // 0 ?!?! 

Z не в module.children внутри C be потому что он уже был загружен B до того, как был выполнен C.

Я могу понять module.parent из Z будучи B, потому что это первое место, он был загружен, но, безусловно, Z может быть ребенком как B и C?

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

ответ

1

У меня была аналогичная проблема в прошлом, и я вручную удалил кэш, в вашем случае для модуля C.

C.js

delete require.cache[require.resolve('./Z')]; 
var z = require('./Z'); // 1 

Я не уверен, если это возможно решение для вас.

+1

Хорошая идея .. но я могу только изменить файл верхнего уровня (думаю: что-то с 'var a = require ('./ A')') .. Я пытаюсь создать инструмент, который отображает зависимости по рекурсивно просматривая 'module.children' –

+0

Хорошая идея, звучит многообещающе :). Ну, как вы обращаетесь к детскому модулю? Можете ли вы очистить кеш, прежде чем обращаться к нему? –

+0

Я создаю один файл сценария, который принимает имя файла в качестве командной строки arg, 'require' этот файл, а затем смотрит на свой собственный 'module.children' - единственный элемент, который был загружен' module'. Затем перезапустите 'module.children', сбрасывая некоторую информацию на консоль. Или, вот цель .. –