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: nodejs#5963
PR-URL: nodejs#17113
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
cjihrig authored and gibfahn committed Jan 27, 2018
1 parent 0fd0518 commit aaca447
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 @@ -514,11 +514,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 aaca447

Please sign in to comment.