| 'use strict'; |
| const common = 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'/); |
| |
| // 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( |
| 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(nodeModules, 'bar.js') |
| ); |
| } |
| |
| // Verify that relative request paths work properly. |
| { |
| const searchIn = './' + path.relative(process.cwd(), nestedIndex); |
| |
| // Search in relative paths. |
| assert.strictEqual( |
| require.resolve('./three.js', { paths: [searchIn] }), |
| path.join(nestedIndex, 'three.js') |
| ); |
| |
| // Search in absolute paths. |
| assert.strictEqual( |
| require.resolve('./three.js', { paths: [nestedIndex] }), |
| path.join(nestedIndex, 'three.js') |
| ); |
| |
| // Repeat the same tests with Windows slashes in the request path. |
| if (common.isWindows) { |
| assert.strictEqual( |
| require.resolve('.\\three.js', { paths: [searchIn] }), |
| path.join(nestedIndex, 'three.js') |
| ); |
| |
| assert.strictEqual( |
| require.resolve('.\\three.js', { paths: [nestedIndex] }), |
| path.join(nestedIndex, 'three.js') |
| ); |
| } |
| } |
| |
| // Test paths option validation |
| assert.throws(() => { |
| require.resolve('.\\three.js', { paths: 'foo' }) |
| }, { |
| code: 'ERR_INVALID_ARG_VALUE', |
| name: 'TypeError', |
| }); |
| |
| // Verify that the default require.resolve() is used for empty options. |
| assert.strictEqual( |
| require.resolve('./printA.js', {}), |
| require.resolve('./printA.js') |
| ); |