avajs/ava

Make dependency tracking work with ESM imports

novemberborn opened this issue · 4 comments

AVA's watch mode tracks which source files are loaded by which test files. This way it knows which test files to re-run. This is based on instrumenting the require code in Node.js. We won't be able to track ESM dependencies using this method.

We'll have to find a different way of resolving dependencies. Perhaps by analyzing the imports of test files. We'll have to allow our Babel and TypeScript providers to participate in this.

I think maybe Jest's haste map does something similar, but it's not documented.

feel free to ignore me, --I'd like to mention this package I released and use https://www.npmjs.com/package/resolvewithplus

perhaps you could use this package or something like it. It was originally written for CJS modules but successfully resolves MJS modules as well.

// returns the full path to the 'main' koa file following CJS rules
resolvewithplus('koa', '/Users/bumble/resolvewith/test/', { esm : true });

the single-file used by the package https://github.com/iambumblehead/resolvewithplus/blob/master/src/resolvewithplus.js

I'm not sure if this is related, but it seems the ignoredByWatcher option does not prevent the watcher from looping. I am able to reproduce it minimally in this repo: https://github.com/rxbugs/ava-watch-ignore

Just run npm run test:watch

See #2957

Looking to tackle with #3123.

Done in #3218.