Скажем, после того, как я требую модуль и сделаю что-то, как показано ниже:
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.