module: don't search in require.resolve.paths

The paths used by require.resolve() should be treated as
starting points for module resolution, and not actually
searched.

PR-URL: https://github.com/nodejs/node/pull/23683
Fixes: https://github.com/nodejs/node/issues/18408
Refs: https://github.com/nodejs/node/issues/23643
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
This commit is contained in:
cjihrig 2018-10-15 23:36:56 -04:00
parent 083b31d850
commit 60ce2fd827
No known key found for this signature in database
GPG Key ID: 7434390BDBE9B9C5
2 changed files with 7 additions and 9 deletions

View File

@ -584,9 +584,6 @@ Module._resolveFilename = function(request, parent, isMain, options) {
fakeParent.paths = Module._nodeModulePaths(path);
const lookupPaths = Module._resolveLookupPaths(request, fakeParent, true);
if (!paths.includes(path))
paths.push(path);
for (var j = 0; j < lookupPaths.length; j++) {
if (!paths.includes(lookupPaths[j]))
paths.push(lookupPaths[j]);

View File

@ -24,11 +24,12 @@ assert.throws(() => {
require.resolve('three')
}, /^Error: Cannot find module 'three'$/);
// However, it can be found if resolution contains the nested index directory.
assert.strictEqual(
require.resolve('three', { paths: [nestedIndex] }),
path.join(nestedIndex, 'three.js')
);
// If the nested-index directory is provided as a resolve path, 'three'
// cannot be found because nested-index is used as a starting point and not
// a searched directory.
assert.throws(() => {
require.resolve('three', { paths: [nestedIndex] })
}, /^Error: Cannot find module 'three'$/);
// Resolution from nested index directory also checks node_modules.
assert.strictEqual(
@ -50,6 +51,6 @@ assert.throws(() => {
paths.unshift(nestedNodeModules);
assert.strictEqual(
require.resolve('bar', { paths }),
path.join(nestedNodeModules, 'bar.js')
path.join(nodeModules, 'bar.js')
);
}