Skip to content

Commit 05cd1a0

Browse files
committedFeb 15, 2019
lib: requireStack property for MODULE_NOT_FOUND
Include the stack of requires that led to a MODULE_NOT_FOUND error. PR-URL: #25690 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Joyee Cheung <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: James M Snell <[email protected]>
1 parent 128170f commit 05cd1a0

File tree

3 files changed

+17
-2
lines changed

3 files changed

+17
-2
lines changed
 

‎doc/api/errors.md

+6-1
Original file line numberDiff line numberDiff line change
@@ -1964,7 +1964,12 @@ an `Error` with this code will be emitted.
19641964

19651965
<a id="MODULE_NOT_FOUND"></a>
19661966
### MODULE_NOT_FOUND
1967-
1967+
<!-- YAML
1968+
changes:
1969+
- version: REPLACEME
1970+
pr-url: https://github.com/nodejs/node/pull/25690
1971+
description: Added `requireStack` property.
1972+
-->
19681973
A module file could not be resolved while attempting a [`require()`][] or
19691974
`import` operation.
19701975

‎lib/internal/modules/cjs/loader.js

+7
Original file line numberDiff line numberDiff line change
@@ -606,9 +606,16 @@ Module._resolveFilename = function(request, parent, isMain, options) {
606606
// Look up the filename first, since that's the cache key.
607607
var filename = Module._findPath(request, paths, isMain);
608608
if (!filename) {
609+
const requireStack = [];
610+
for (var cursor = parent;
611+
cursor;
612+
cursor = cursor.parent) {
613+
requireStack.push(cursor.filename || cursor.id);
614+
}
609615
// eslint-disable-next-line no-restricted-syntax
610616
var err = new Error(`Cannot find module '${request}'`);
611617
err.code = 'MODULE_NOT_FOUND';
618+
err.requireStack = requireStack;
612619
throw err;
613620
}
614621
return filename;

‎lib/internal/modules/esm/default_resolve.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,11 @@ function resolve(specifier, parentURL) {
6666
parentURL || pathToFileURL(`${process.cwd()}/`).href);
6767
} catch (e) {
6868
if (typeof e.message === 'string' &&
69-
StringStartsWith(e.message, 'Cannot find module'))
69+
StringStartsWith(e.message, 'Cannot find module')) {
7070
e.code = 'MODULE_NOT_FOUND';
71+
// TODO: also add e.requireStack to match behavior with CJS
72+
// MODULE_NOT_FOUND.
73+
}
7174
throw e;
7275
}
7376

0 commit comments

Comments
 (0)