Open mtmacdonald opened 3 years ago
When nodejs calls import()
on the same file twice, it will reuse loaded module from 1st call for the 2nd call, same as you do require()
twice in CommonJS code before.
Here is the approve, inside a folder, create two files:
package.json
{ "type": "module" }
foo.js
console.log("loading foo");
export default "FOOooOO";
Then in nodejs REPL command line, create a function test() to import foo and print out result.
You can see the first import()
triggered the console log "loading foo" in the foo.js, but second import()
didn't log it again, means nodejs didn't read foo.js again.
> node
Welcome to Node.js v14.17.0.
Type ".help" for more information.
> async function test() {
... const foo = await import('./foo.js');
... console.log('foo', foo);
... }
undefined
> test()
Promise { <pending> }
> loading foo
foo [Module: null prototype] { default: 'FOOooOO' }
> test()
Promise { <pending> }
> foo [Module: null prototype] { default: 'FOOooOO' }
@3cp
Do you know how to delete import()
cache?
I am using this temporary solution:
import("./foo.js?"+new Date().getTime())
I'm trying to use
mock-fs
to unit test code which uses ES6 dynamic imports.There seems to an unexpected coupling between tests when I'm using dynamic imports, even when I call
restore()
after each test. It appears as thoughfs.readFile()
behaves as expected between tests (no coupling), butawait import()
has coupling (it returns the result from the previous test).I've created a minimal Jest test case that reproduces the issue. The tests pass individually, but not when run together. I notice that if I change the
directory
value so it's different between each test, then they pass together.Can you help me understand why this doesn't work, whether it's a bug, and what I should do here?