Skip to content

Commit 5f72ad5

Browse files
markusdapPooya Parsa
authored andcommitted
refactor(core): use require.resolve instead of Module internals (nuxt#5796)
1 parent 7e50fe7 commit 5f72ad5

2 files changed

Lines changed: 16 additions & 17 deletions

File tree

packages/core/src/resolver.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import Module from 'module'
21
import { resolve, join } from 'path'
32
import fs from 'fs-extra'
43
import consola from 'consola'
@@ -19,17 +18,21 @@ export default class Resolver {
1918

2019
// ESM Loader
2120
this.esm = esm(module)
21+
22+
this._resolve = require.resolve
2223
}
2324

2425
resolveModule(path) {
2526
try {
26-
return Module._resolveFilename(path, {
27+
return this._resolve(path, {
2728
paths: this.options.modulesDir
2829
})
2930
} catch (error) {
30-
if (error.code === 'MODULE_NOT_FOUND') {
31-
return undefined
32-
} else {
31+
if (error.code !== 'MODULE_NOT_FOUND') {
32+
// TODO: remove after https://github.com/facebook/jest/pull/8487 released
33+
if (process.env.NODE_ENV === 'test' && error.message.startsWith('Cannot resolve module')) {
34+
return
35+
}
3336
throw error
3437
}
3538
}

packages/core/test/resolver.test.js

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import Module from 'module'
21
import path from 'path'
32
import esm from 'esm'
43
import fs from 'fs-extra'
@@ -7,7 +6,6 @@ import { startsWithRootAlias, startsWithSrcAlias } from '@nuxt/utils'
76

87
import Resolver from '../src/resolver'
98

10-
jest.mock('module')
119
jest.mock('path')
1210
jest.mock('esm', () => jest.fn(() => jest.fn()))
1311
jest.mock('fs-extra')
@@ -33,24 +31,24 @@ describe('core: resolver', () => {
3331
expect(esm).toBeCalledTimes(1)
3432
})
3533

36-
test('should call _resolveFilename in resolveModule', () => {
34+
test('should call require.resolve in resolveModule', () => {
3735
const resolver = new Resolver({
3836
options: { modulesDir: '/var/nuxt/node_modules' }
3937
})
40-
Module._resolveFilename = jest.fn(() => '/var/nuxt/resolver/module')
38+
const resolve = resolver._resolve = jest.fn(() => '/var/nuxt/resolver/module')
4139

4240
const modulePath = resolver.resolveModule('/var/nuxt/resolver')
4341

4442
expect(modulePath).toEqual('/var/nuxt/resolver/module')
45-
expect(Module._resolveFilename).toBeCalledTimes(1)
46-
expect(Module._resolveFilename).toBeCalledWith('/var/nuxt/resolver', { paths: '/var/nuxt/node_modules' })
43+
expect(resolve).toBeCalledTimes(1)
44+
expect(resolve).toBeCalledWith('/var/nuxt/resolver', { paths: '/var/nuxt/node_modules' })
4745
})
4846

4947
test('should return undefined when module is not found', () => {
5048
const resolver = new Resolver({
5149
options: { modulesDir: '/var/nuxt/node_modules' }
5250
})
53-
Module._resolveFilename = jest.fn(() => {
51+
const resolve = resolver._resolve = jest.fn(() => {
5452
const err = new Error()
5553
err.code = 'MODULE_NOT_FOUND'
5654
throw err
@@ -59,16 +57,14 @@ describe('core: resolver', () => {
5957
const modulePath = resolver.resolveModule('/var/nuxt/resolver')
6058

6159
expect(modulePath).toBeUndefined()
62-
expect(Module._resolveFilename).toBeCalledTimes(1)
60+
expect(resolve).toBeCalledTimes(1)
6361
})
6462

65-
test('should throw error when _resolveFilename failed', () => {
63+
test('should throw error when require.resolve failed', () => {
6664
const resolver = new Resolver({
6765
options: { modulesDir: '/var/nuxt/node_modules' }
6866
})
69-
Module._resolveFilename = jest.fn(() => {
70-
throw new Error('resolve failed')
71-
})
67+
resolver._resolve = jest.fn(() => { throw new Error('resolve failed') })
7268

7369
expect(() => resolver.resolveModule('/var/nuxt/resolver')).toThrow('resolve failed')
7470
})

0 commit comments

Comments
 (0)