Closed as not planned
Description
Version
v22.2.0
Platform
Linux 6.6.15-2rodete2-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.6.15-2rodete2 (2024-03-19) x86_64 GNU/Linux
Subsystem
No response
What steps will reproduce the bug?
Since Node.js version 22.2, ESM loader hooks no longer function inside of a worker and the Node.js application becomes unresponsive.
app.js
const { Worker, isMainThread } = require("node:worker_threads");
if (!isMainThread) {
import("./test.mjs").then(console.log).catch(console.error);
} else {
new Worker("./app.js", {
execArgv: [
'--import=data:text/javascript,import { register } from "node:module"; import { pathToFileURL } from "node:url"; register("./hooks.mjs", pathToFileURL("./"), { data: {} });',
],
});
}
hooks.mjs
export async function initialize() {
console.log('init')
}
export async function resolve(specifier, context, nextResolve) {
console.log('resolve: ' + specifier)
return nextResolve(specifier, context)
}
$ node app.js
How often does it reproduce? Is there a required condition?
Always
What is the expected behavior? Why is that the expected behavior?
init
Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/test-loader-esm/test.mjs' imported from ///test-loader-esm/app.js
at finalizeResolution (node:internal/modules/esm/resolve:264:11)
at moduleResolve (node:internal/modules/esm/resolve:924:10)
at defaultResolve (node:internal/modules/esm/resolve:1148:11)
at nextResolve (node:internal/modules/esm/hooks:750:28)
at resolve (/test-loader-esm/hooks.mjs:8:10)
at nextResolve (node:internal/modules/esm/hooks:750:28)
at Hooks.resolve (node:internal/modules/esm/hooks:238:30)
at handleMessage (node:internal/modules/esm/worker:199:24)
at Immediate.checkForMessages (node:internal/modules/esm/worker:141:28)
at process.processImmediate (node:internal/timers:478:21) {
code: 'ERR_MODULE_NOT_FOUND',
url: '/test-loader-esm/test.mjs'
}
resolve: ./test.mjs
What do you see instead?
Application becomes unresponsive.
Additional information
I suspect that this is caused by #52706