-
Notifications
You must be signed in to change notification settings - Fork 29.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
module: support custom paths to require.resolve()
This commit allows custom lookup paths to be passed to require.resolve(). It also adds require.resolve.paths() which retrieves the default resolution paths. Fixes: #5963 Fixes: #16389 PR-URL: #16397 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Wyatt Preul <[email protected]> Reviewed-By: Gireesh Punathil <[email protected]>
- Loading branch information
Showing
6 changed files
with
110 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
'use strict'; | ||
require('../common'); | ||
const assert = require('assert'); | ||
const path = require('path'); | ||
const nodeModules = path.join(__dirname, 'node_modules'); | ||
const nestedNodeModules = path.join(__dirname, 'node_modules', 'node_modules'); | ||
const nestedIndex = path.join(__dirname, 'nested-index'); | ||
|
||
// Test the default behavior. | ||
assert.strictEqual( | ||
require.resolve('bar'), | ||
path.join(nodeModules, 'bar.js') | ||
); | ||
|
||
// Verify that existing paths are removed. | ||
assert.throws(() => { | ||
require.resolve('bar', { paths: [] }) | ||
}, /^Error: Cannot find module 'bar'$/); | ||
|
||
// Verify that resolution path can be overwritten. | ||
{ | ||
// three.js cannot be loaded from this file by default. | ||
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') | ||
); | ||
|
||
// Resolution from nested index directory also checks node_modules. | ||
assert.strictEqual( | ||
require.resolve('bar', { paths: [nestedIndex] }), | ||
path.join(nodeModules, 'bar.js') | ||
); | ||
} | ||
|
||
// Verify that the default paths can be used and modified. | ||
{ | ||
const paths = require.resolve.paths('bar'); | ||
|
||
assert.strictEqual(paths[0], nodeModules); | ||
assert.strictEqual( | ||
require.resolve('bar', { paths }), | ||
path.join(nodeModules, 'bar.js') | ||
); | ||
|
||
paths.unshift(nestedNodeModules); | ||
assert.strictEqual( | ||
require.resolve('bar', { paths }), | ||
path.join(nestedNodeModules, 'bar.js') | ||
); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters