Как удалить модуль после "require" в node.js?

Скажем, после того, как я требую модуль и сделаю что-то, как показано ниже:

var b = require('./b.js');
--- do something with b ---

Затем я хочу отнять модуль b (т.е. очистить кеш). как я могу это сделать?

Причина в том, что я хочу динамически загружать/удалять или обновлять модуль без перезапуска сервера node. любая идея?

------- more -------- на основе предложения удалить require.cache, он все равно не работает...

what I did are few things:
1) delete require.cache[require.resolve('./b.js')];
2) loop for every require.cache children and remove any child who is b.js
3) delete b

Однако, когда я звоню b, он все еще там! он по-прежнему доступен. если я этого не сделаю:

b = {};

Не уверен, что это хороший способ справиться с этим. потому что, если позже, я требую ('./b.js') снова, когда b.js был изменен. Будет ли потребоваться старый кешированный b.js(который я пытался удалить) или новый?

----------- Больше находок --------------

ок. я больше тестирую и играю с кодом.. вот что я нашел:

1) delete require.cache[]  is essential.  Only if it is deleted, 
 then the next time I load a new b.js will take effect.
2) looping through require.cache[] and delete any entry in the 
 children with the full filename of b.js doesn't take any effect.  i.e.
u can delete or leave it.  However, I'm unsure if there is any side
effect.  I think it is a good idea to keep it clean and delete it if
there is no performance impact.
3) of course, assign b={} doesn't really necessary, but i think it is 
 useful to also keep it clean.

Ответ 1

Вы можете использовать это, чтобы удалить свою запись в кеше:

delete require.cache[require.resolve('./b.js')]

require.resolve() будет определять полный путь ./b.js, который используется как ключ кэш.

Ответ 2

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

require.cache = {};