Skip to content

Commit

Permalink
module: replace default paths in require.resolve()
Browse files Browse the repository at this point in the history
Prior to this commit, the default search paths would be included
in the require.resolve() process, even if user specified paths
were provided. This commit causes the default paths to be
omitted by using a fake parent module.

Refs: #5963
PR-URL: #17113
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
cjihrig authored and MylesBorins committed Dec 11, 2017
1 parent 9c0c336 commit caff930
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 1 deletion.
5 changes: 4 additions & 1 deletion lib/module.js
Original file line number Diff line number Diff line change
Expand Up @@ -518,11 +518,14 @@ Module._resolveFilename = function(request, parent, isMain, options) {

if (typeof options === 'object' && options !== null &&
Array.isArray(options.paths)) {
const fakeParent = new Module('', null);

paths = [];

for (var i = 0; i < options.paths.length; i++) {
const path = options.paths[i];
const lookupPaths = Module._resolveLookupPaths(path, parent, true);
fakeParent.paths = Module._nodeModulePaths(path);
const lookupPaths = Module._resolveLookupPaths(request, fakeParent, true);

if (!paths.includes(path))
paths.push(path);
Expand Down
Empty file.
21 changes: 21 additions & 0 deletions test/fixtures/resolve-paths/default/verify-paths.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
'use strict';
require('../../../common');
const assert = require('assert');
const path = require('path');

// By default, resolving 'dep' should return
// fixturesDir/resolve-paths/default/node_modules/dep/index.js. By setting
// the path to fixturesDir/resolve-paths/default, the 'default' directory
// structure should be ignored.

assert.strictEqual(
require.resolve('dep'),
path.join(__dirname, 'node_modules', 'dep', 'index.js')
);

const paths = [path.resolve(__dirname, '..', 'defined')];

assert.strictEqual(
require.resolve('dep', { paths }),
path.join(paths[0], 'node_modules', 'dep', 'index.js')
);
Empty file.
1 change: 1 addition & 0 deletions test/parallel/test-require-resolve.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,4 @@ assert.strictEqual('path', require.resolve('path'));

// Test configurable resolve() paths.
require(fixtures.path('require-resolve.js'));
require(fixtures.path('resolve-paths', 'default', 'verify-paths.js'));

0 comments on commit caff930

Please sign in to comment.