How to remove module after "require" in node.js? How to remove module after "require" in node.js? node.js node.js

How to remove module after "require" in node.js?


You can use this to delete its entry in the cache:

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

require.resolve() will figure out the full path of ./b.js, which is used as a cache key.


One of the easiest ways (although not the best in terms of performance as even unrelated module's caches get cleared) would be to simply purge every module in the cache

Note that clearing the cache for *.node files (native modules) might cause undefined behaviour and therefore is not supported (https://github.com/nodejs/node/commit/5c14d695d2c1f924cf06af6ae896027569993a5c), so there needs to be an if statement to ensure those don't get removed from the cache, too.

    for (const path in require.cache) {      if (path.endsWith('.js')) { // only clear *.js, not *.node        delete require.cache[path]      }    }


Spent some time trying to clear cache in Jest tests for Vuex store with no luck. Seems like Jest has its own mechanism that doesn't need manual call to delete require.cache.

beforeEach(() => {  jest.resetModules();});

And tests:

let store;it("1", () => {   process.env.something = true;   store = require("@/src/store.index");});it("2", () => {   process.env.something = false;   store = require("@/src/store.index");});

Both stores will be different modules.