Skip to content

doc: fix documentation for `MODULE_NOT_FOUND` and `ERR_MODULE_NOT_FOUND`

ERR_MODULE_NOT_FOUND was still marked as experimental, probably an oversight from https://github.com/nodejs/node/pull/35781. ERR_MODULE_NOT_FOUND is thrown wether the target specifier would be an ES module or not (we cannot really know the format of a file that doesn't exist anyway). I've added a note regarding which module loader is involved (sorry @GeoffreyBooth), which is unfortunate but I didn't know how to explain the difference otherwise.

Repro snippets
$ node /nope
node:internal/modules/cjs/loader:936
  throw err;
  ^

Error: Cannot find module '/nope'
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15)
    at Function.Module._load (node:internal/modules/cjs/loader:778:27)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
    at node:internal/main/run_main_module:17:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

Node.js v17.4.0
$ node -e 'require("/nope")'
node:internal/modules/cjs/loader:936
  throw err;
  ^

Error: Cannot find module '/nope'
Require stack:
- …/[eval]
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15)
    at Function.Module._load (node:internal/modules/cjs/loader:778:27)
    at Module.require (node:internal/modules/cjs/loader:999:19)
    at require (node:internal/modules/cjs/helpers:102:18)
    at [eval]:1:1
    at Script.runInThisContext (node:vm:129:12)
    at Object.runInThisContext (node:vm:305:38)
    at node:internal/process/execution:75:19
    at [eval]-wrapper:6:22
    at evalScript (node:internal/process/execution:74:60) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [ '…/[eval]' ]
}

Node.js v17.4.0
$ node --input-type=module -e 'import"/nope"'
node:internal/errors:464
    ErrorCaptureStackTrace(err);
    ^

Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/nope' imported from …/[eval1]
    at new NodeError (node:internal/errors:371:5)
    at finalizeResolution (node:internal/modules/esm/resolve:394:11)
    at moduleResolve (node:internal/modules/esm/resolve:944:10)
    at defaultResolve (node:internal/modules/esm/resolve:1041:11)
    at ESMLoader.resolve (node:internal/modules/esm/loader:530:30)
    at ESMLoader.getModuleJob (node:internal/modules/esm/loader:251:18)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:79:40)
    at link (node:internal/modules/esm/module_job:78:36) {
  code: 'ERR_MODULE_NOT_FOUND'
}

Node.js v17.4.0
$ node --experimental-specifier-resolution=node /nope
node:internal/errors:464
    ErrorCaptureStackTrace(err);
    ^

Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/nope' imported from …
    at new NodeError (node:internal/errors:371:5)
    at finalizeResolution (node:internal/modules/esm/resolve:383:11)
    at moduleResolve (node:internal/modules/esm/resolve:944:10)
    at defaultResolve (node:internal/modules/esm/resolve:1041:11)
    at ESMLoader.resolve (node:internal/modules/esm/loader:530:30)
    at ESMLoader.getModuleJob (node:internal/modules/esm/loader:251:18)
    at ESMLoader.import (node:internal/modules/esm/loader:332:22)
    at node:internal/modules/run_main:54:28
    at loadESM (node:internal/process/esm_loader:88:11)
    at async handleMainPromise (node:internal/modules/run_main:61:12) {
  code: 'ERR_MODULE_NOT_FOUND'
}

Node.js v17.4.0
$ node --input-type=module -e 'import("/nope").catch(console.error)'
Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/nope' imported from …/[eval1]
    at new NodeError (node:internal/errors:371:5)
    at finalizeResolution (node:internal/modules/esm/resolve:394:11)
    at moduleResolve (node:internal/modules/esm/resolve:944:10)
    at defaultResolve (node:internal/modules/esm/resolve:1041:11)
    at ESMLoader.resolve (node:internal/modules/esm/loader:530:30)
    at ESMLoader.getModuleJob (node:internal/modules/esm/loader:251:18)
    at ESMLoader.import (node:internal/modules/esm/loader:332:22)
    at importModuleDynamically (node:internal/modules/esm/loader:213:29)
    at importModuleDynamicallyCallback (node:internal/process/esm_loader:35:14)
    at file://…/[eval1]:1:1 {
  code: 'ERR_MODULE_NOT_FOUND'
}
$ node --input-type=commonjs -e 'import("/nope").catch(console.error)'
Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/nope' imported from …/[eval]
    at new NodeError (node:internal/errors:371:5)
    at finalizeResolution (node:internal/modules/esm/resolve:394:11)
    at moduleResolve (node:internal/modules/esm/resolve:944:10)
    at defaultResolve (node:internal/modules/esm/resolve:1041:11)
    at ESMLoader.resolve (node:internal/modules/esm/loader:530:30)
    at ESMLoader.getModuleJob (node:internal/modules/esm/loader:251:18)
    at ESMLoader.import (node:internal/modules/esm/loader:332:22)
    at importModuleDynamically (node:internal/process/execution:81:29)
    at importModuleDynamicallyWrapper (node:internal/vm/module:437:21)
    at importModuleDynamicallyCallback (node:internal/process/esm_loader:35:14) {
  code: 'ERR_MODULE_NOT_FOUND'
}

Merge request reports

Loading