nodejs / node

Node.js JavaScript runtime ✨🐢🚀✨
https://nodejs.org
Other
107.11k stars 29.34k forks source link

`Error: request for 'node:process' is not in cache` #52187

Open coderaiser opened 6 months ago

coderaiser commented 6 months ago

Node crashes with strange error.

Version

v20.11.1

Platform

Mac Os

Subsystem

node:process

What steps will reproduce the bug?

git clone https://github.com/coderaiser/cloudcmd
cd cloudcmd && git checkout feature/esm && npm i && npm test

How often does it reproduce? Is there a required condition?

Always

What is the expected behavior? Why is that the expected behavior?

Expected behavior: no crash

What do you see instead?

image

Additional information

No response

marco-ippolito commented 6 months ago

can you provide a reproducible example without 3rd party dependencies?

coderaiser commented 6 months ago

You cat take a look at commit, when imports awaited in Primise.all - there is such strange arror, when they awaited one-by-one there is no such error.

coderaiser commented 6 months ago

Here is minimal example on provided branch feature/esm:

const hrefs = [
  'file:///Users/coderaiser/cloudcmd/test/static.mjs',
  'file:///Users/coderaiser/cloudcmd/test/before.mjs',
  'file:///Users/coderaiser/cloudcmd/test/server/show-config.js',
  'file:///Users/coderaiser/cloudcmd/test/server/modulas.mjs',
  'file:///Users/coderaiser/cloudcmd/test/server/env.js',
  'file:///Users/coderaiser/cloudcmd/test/rest/copy.mjs',
  'file:///Users/coderaiser/cloudcmd/test/rest/config.mjs',
  'file:///Users/coderaiser/cloudcmd/test/common/cloudfunc.js',
  'file:///Users/coderaiser/cloudcmd/test/client/listeners/get-range.js',
  'file:///Users/coderaiser/cloudcmd/test/client/listeners/get-index.js',
  'file:///Users/coderaiser/cloudcmd/client/dom/events/event-store.spec.js',
  'file:///Users/coderaiser/cloudcmd/static/user-menu.spec.js',
  'file:///Users/coderaiser/cloudcmd/common/util.spec.js',
  'file:///Users/coderaiser/cloudcmd/common/try-to-promise-all.spec.js',
  'file:///Users/coderaiser/cloudcmd/common/entity.spec.js',
  'file:///Users/coderaiser/cloudcmd/common/datetime.spec.js',
  'file:///Users/coderaiser/cloudcmd/common/cloudfunc.spec.js',
  'file:///Users/coderaiser/cloudcmd/common/callbackify.spec.js',
  'file:///Users/coderaiser/cloudcmd/common/base64.spec.js',
  'file:///Users/coderaiser/cloudcmd/server/validate.spec.mjs',
  'file:///Users/coderaiser/cloudcmd/server/user-menu.spec.mjs',
  'file:///Users/coderaiser/cloudcmd/server/terminal.spec.mjs',
  'file:///Users/coderaiser/cloudcmd/server/route.spec.mjs',
  'file:///Users/coderaiser/cloudcmd/server/rest/index.spec.js',
  'file:///Users/coderaiser/cloudcmd/server/markdown/index.spec.mjs',
  'file:///Users/coderaiser/cloudcmd/server/distribute/log.spec.js',
  'file:///Users/coderaiser/cloudcmd/server/distribute/import.spec.mjs',
  'file:///Users/coderaiser/cloudcmd/server/distribute/export.spec.mjs'
];

const imports = [];

for (const href of hrefs) {
    imports.push(import(href));
}

await Promise.all(imports);

You will see:

node:internal/modules/esm/module_job:134
        this.module.instantiate();
                    ^
Error: request for 'node:process' is not in cache
    at ModuleJob._instantiate (node:internal/modules/esm/module_job:134:21)
    at async ModuleJob.run (node:internal/modules/esm/module_job:217:5)
    at async ModuleLoader.import (node:internal/modules/esm/loader:323:24)
    at async Promise.all (index 26)
    at async file:///Users/coderaiser/cloudcmd/1.mjs:38:1 {
  code: 'ERR_VM_MODULE_LINK_FAILURE'
}

Node.js v20.12.0

If you comment first line in hrefs array, or rewrite imports loop to:

for (const href of hrefs) {
    await import(href);
}

you will see the reason of a crash, useful error message:

import io from 'socket.io';
       ^^
SyntaxError: The requested module 'socket.io' does not provide an export named 'default'
    at ModuleJob._instantiate (node:internal/modules/esm/module_job:134:21)
    at async ModuleJob.run (node:internal/modules/esm/module_job:217:5)
    at async ModuleLoader.import (node:internal/modules/esm/loader:323:24)
    at async file:///Users/coderaiser/cloudcmd/2.mjs:35:5

Node.js v20.12.0

So that is something related to parallel imports and Node's cache.

Would be great to see useful error message when everything is crashed.

Trott commented 6 months ago

@nodejs/loaders