node_modules/has-submodule/package.json
{
"name": "has-submodule",
"type": "module",
"exports": {
"./sub": "./sub.js"
}
}
node_modules/has-submodule/sub.js
export const foo = 'bar'
console.log('loaded submodule')
cat: node_modules/reexport-submodule/sub.js: No such file or directory
node_modules/reexport-submodule/package.json
{
"name": "reexport-submodule",
"exports": {
".": "./index.js"
},
"type": "module"
}
node_modules/reexport-submodule/index.js
export * from 'has-submodule/sub'
load-sub.mjs
import { foo } from 'reexport-submodule'
console.log(foo)
esm-loader.mjs
export * from 'import-in-the-middle/hook.mjs'
Expected Behavior
$ node load-sub.mjs
loaded submodule
bar
$ node --loader=./esm-loader.mjs load-sub.mjs
loaded submodule
bar
Actual Behavior
$ node --loader=./esm-loader.mjs load-sub.mjs
(node:36249) ExperimentalWarning: `--experimental-loader` may be removed in the future; instead use `register()`:
--import 'data:text/javascript,import { register } from "node:module"; import { pathToFileURL } from "node:url"; register("./esm-loader.mjs", pathToFileURL("./"));'
(Use `node --trace-warnings ...` to show where the warning was created)
node:internal/process/esm_loader:40
internalBinding('errors').triggerUncaughtException(
^
[Error: ENOENT: no such file or directory, open '/Users/isaacs/dev/tapjs/esm-tap-repro/node_modules/reexport-submodule/has-submodule/sub'] {
errno: -2,
code: 'ENOENT',
syscall: 'open',
path: '/Users/isaacs/dev/tapjs/esm-tap-repro/node_modules/reexport-submodule/has-submodule/sub'
}
Node.js v20.9.0
Steps to Reproduce the Problem
Shown above.
node_modules/has-submodule/package.json{ "name": "has-submodule", "type": "module", "exports": { "./sub": "./sub.js" } }node_modules/has-submodule/sub.jsnode_modules/reexport-submodule/package.json{ "name": "reexport-submodule", "exports": { ".": "./index.js" }, "type": "module" }node_modules/reexport-submodule/index.jsload-sub.mjsesm-loader.mjsExpected Behavior
Actual Behavior
Steps to Reproduce the Problem
Shown above.