Skip to content

Commit c672077

Browse files
committed
lib: simplify Module._resolveLookupPaths
This commit consists of two changes: * Avoids returning request/id *just* for the debug() output * Returns `null` instead of an empty array for the list of paths PR-URL: #10789 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Michaël Zasso <[email protected]> Reviewed-By: Michael Dawson <[email protected]> Reviewed-By: Matteo Collina <[email protected]> Reviewed-By: Benjamin Gruenbaum <[email protected]>
1 parent e32425b commit c672077

File tree

3 files changed

+22
-16
lines changed

3 files changed

+22
-16
lines changed

lib/module.js

+15-14
Original file line numberDiff line numberDiff line change
@@ -326,14 +326,14 @@ if (process.platform === 'win32') {
326326
// 'index.' character codes
327327
var indexChars = [ 105, 110, 100, 101, 120, 46 ];
328328
var indexLen = indexChars.length;
329-
Module._resolveLookupPaths = function(request, parent) {
329+
Module._resolveLookupPaths = function(request, parent, newReturn) {
330330
if (NativeModule.nonInternalExists(request)) {
331-
return [request, []];
331+
debug('looking for %j in []', request);
332+
return (newReturn ? null : [request, []]);
332333
}
333334

334-
var reqLen = request.length;
335335
// Check for relative path
336-
if (reqLen < 2 ||
336+
if (request.length < 2 ||
337337
request.charCodeAt(0) !== 46/*.*/ ||
338338
(request.charCodeAt(1) !== 46/*.*/ &&
339339
request.charCodeAt(1) !== 47/*/*/)) {
@@ -355,15 +355,18 @@ Module._resolveLookupPaths = function(request, parent) {
355355
}
356356
}
357357

358-
return [request, paths];
358+
debug('looking for %j in %j', request, paths);
359+
return (newReturn ? (paths.length > 0 ? paths : null) : [request, paths]);
359360
}
360361

361362
// with --eval, parent.id is not set and parent.filename is null
362363
if (!parent || !parent.id || !parent.filename) {
363364
// make require('./path/to/foo') work - normally the path is taken
364365
// from realpath(__filename) but with eval there is no filename
365366
var mainPaths = ['.'].concat(Module._nodeModulePaths('.'), modulePaths);
366-
return [request, mainPaths];
367+
368+
debug('looking for %j in %j', request, mainPaths);
369+
return (newReturn ? mainPaths : [request, mainPaths]);
367370
}
368371

369372
// Is the parent an index module?
@@ -413,7 +416,9 @@ Module._resolveLookupPaths = function(request, parent) {
413416
debug('RELATIVE: requested: %s set ID to: %s from %s', request, id,
414417
parent.id);
415418

416-
return [id, [path.dirname(parent.filename)]];
419+
var parentDir = [path.dirname(parent.filename)];
420+
debug('looking for %j in %j', id, parentDir);
421+
return (newReturn ? parentDir : [id, parentDir]);
417422
};
418423

419424

@@ -472,16 +477,12 @@ Module._resolveFilename = function(request, parent, isMain) {
472477
return request;
473478
}
474479

475-
var resolvedModule = Module._resolveLookupPaths(request, parent);
476-
var id = resolvedModule[0];
477-
var paths = resolvedModule[1];
480+
var paths = Module._resolveLookupPaths(request, parent, true);
478481

479482
// look up the filename first, since that's the cache key.
480-
debug('looking for %j in %j', id, paths);
481-
482483
var filename = Module._findPath(request, paths, isMain);
483484
if (!filename) {
484-
var err = new Error("Cannot find module '" + request + "'");
485+
var err = new Error(`Cannot find module '${request}'`);
485486
err.code = 'MODULE_NOT_FOUND';
486487
throw err;
487488
}
@@ -564,7 +565,7 @@ Module.prototype._compile = function(content, filename) {
564565
if (!resolvedArgv) {
565566
// we enter the repl if we're not given a filename argument.
566567
if (process.argv[1]) {
567-
resolvedArgv = Module._resolveFilename(process.argv[1], null);
568+
resolvedArgv = Module._resolveFilename(process.argv[1], null, false);
568569
} else {
569570
resolvedArgv = 'repl';
570571
}

lib/repl.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -712,7 +712,7 @@ REPLServer.prototype.createContext = function() {
712712
}
713713

714714
const module = new Module('<repl>');
715-
module.paths = Module._resolveLookupPaths('<repl>', parentModule)[1];
715+
module.paths = Module._resolveLookupPaths('<repl>', parentModule, true) || [];
716716

717717
const require = internalModule.makeRequireFunction(module);
718718
context.module = module;

test/parallel/test-module-relative-lookup.js

+6-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,12 @@ require('../common');
44
const assert = require('assert');
55
const _module = require('module'); // avoid collision with global.module
66
const lookupResults = _module._resolveLookupPaths('./lodash');
7-
const paths = lookupResults[1];
7+
let paths = lookupResults[1];
88

99
assert.strictEqual(paths[0], '.',
1010
'Current directory gets highest priority for local modules');
11+
12+
paths = _module._resolveLookupPaths('./lodash', null, true);
13+
14+
assert.strictEqual(paths && paths[0], '.',
15+
'Current directory gets highest priority for local modules');

0 commit comments

Comments
 (0)