From 4a895b4fec7dccc5ca31b63d9a6c6a5e9f6022fd Mon Sep 17 00:00:00 2001 From: Markus Padourek Date: Thu, 23 May 2019 12:49:35 +0200 Subject: [PATCH 1/7] Use require.resolve instead of private module fn --- packages/core/src/resolver.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/core/src/resolver.js b/packages/core/src/resolver.js index 7f7ff2f3262d..26ef3b4cf17a 100644 --- a/packages/core/src/resolver.js +++ b/packages/core/src/resolver.js @@ -1,4 +1,3 @@ -import Module from 'module' import { resolve, join } from 'path' import fs from 'fs-extra' import consola from 'consola' @@ -23,7 +22,7 @@ export default class Resolver { resolveModule(path) { try { - return Module._resolveFilename(path, { + return require.resolve(path, { paths: this.options.modulesDir }) } catch (error) { From 3a49ccb0dd3379d7bdb9fabb118b605e736274ae Mon Sep 17 00:00:00 2001 From: globegitter Date: Thu, 23 May 2019 13:12:55 +0200 Subject: [PATCH 2/7] Fix error handling. --- packages/core/src/resolver.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/core/src/resolver.js b/packages/core/src/resolver.js index 26ef3b4cf17a..6a422b2ebfc7 100644 --- a/packages/core/src/resolver.js +++ b/packages/core/src/resolver.js @@ -1,3 +1,4 @@ +import Module from 'module' import { resolve, join } from 'path' import fs from 'fs-extra' import consola from 'consola' @@ -26,7 +27,7 @@ export default class Resolver { paths: this.options.modulesDir }) } catch (error) { - if (error.code === 'MODULE_NOT_FOUND') { + if (error.code === "MODULE_NOT_FOUND" || error.message.includes('Cannot resolve module')) { return undefined } else { throw error From 331ba675b36f789bc64e28551c8254eeeb9a1d3b Mon Sep 17 00:00:00 2001 From: globegitter Date: Thu, 23 May 2019 13:15:57 +0200 Subject: [PATCH 3/7] Fix linting. --- packages/core/src/resolver.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/core/src/resolver.js b/packages/core/src/resolver.js index 6a422b2ebfc7..25ce0057f991 100644 --- a/packages/core/src/resolver.js +++ b/packages/core/src/resolver.js @@ -1,4 +1,3 @@ -import Module from 'module' import { resolve, join } from 'path' import fs from 'fs-extra' import consola from 'consola' @@ -27,7 +26,7 @@ export default class Resolver { paths: this.options.modulesDir }) } catch (error) { - if (error.code === "MODULE_NOT_FOUND" || error.message.includes('Cannot resolve module')) { + if (error.code === 'MODULE_NOT_FOUND' || error.message.includes('Cannot resolve module')) { return undefined } else { throw error From 637fc7db5c1e59be08b9755ccf6fcb67cc978a48 Mon Sep 17 00:00:00 2001 From: globegitter Date: Thu, 23 May 2019 13:36:52 +0200 Subject: [PATCH 4/7] Fix first test suite. --- packages/core/src/resolver.js | 7 +++-- packages/core/test/resolver.test.js | 41 +++++++++++++++-------------- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/packages/core/src/resolver.js b/packages/core/src/resolver.js index 25ce0057f991..50a138fa788e 100644 --- a/packages/core/src/resolver.js +++ b/packages/core/src/resolver.js @@ -6,7 +6,7 @@ import esm from 'esm' import { startsWithRootAlias, startsWithSrcAlias } from '@nuxt/utils' export default class Resolver { - constructor(nuxt) { + constructor(nuxt, moduleResolver) { this.nuxt = nuxt this.options = this.nuxt.options @@ -18,11 +18,14 @@ export default class Resolver { // ESM Loader this.esm = esm(module) + + // module resolver + this.moduleResolver = moduleResolver || require.resolve } resolveModule(path) { try { - return require.resolve(path, { + return this.moduleResolver(path, { paths: this.options.modulesDir }) } catch (error) { diff --git a/packages/core/test/resolver.test.js b/packages/core/test/resolver.test.js index 5942393d50fc..eafbdf2831ef 100644 --- a/packages/core/test/resolver.test.js +++ b/packages/core/test/resolver.test.js @@ -1,4 +1,3 @@ -import Module from 'module' import path from 'path' import esm from 'esm' import fs from 'fs-extra' @@ -7,7 +6,6 @@ import { startsWithRootAlias, startsWithSrcAlias } from '@nuxt/utils' import Resolver from '../src/resolver' -jest.mock('module') jest.mock('path') jest.mock('esm', () => jest.fn(() => jest.fn())) jest.mock('fs-extra') @@ -33,42 +31,45 @@ describe('core: resolver', () => { expect(esm).toBeCalledTimes(1) }) - test('should call _resolveFilename in resolveModule', () => { - const resolver = new Resolver({ - options: { modulesDir: '/var/nuxt/node_modules' } - }) - Module._resolveFilename = jest.fn(() => '/var/nuxt/resolver/module') + test('should call require.resolve in resolveModule', () => { + require.resolve = jest.fn(() => '/var/nuxt/resolver/module'); + const resolver = new Resolver( + { + options: { modulesDir: '/var/nuxt/node_modules' } + }, + require.resolve, + ) const modulePath = resolver.resolveModule('/var/nuxt/resolver') expect(modulePath).toEqual('/var/nuxt/resolver/module') - expect(Module._resolveFilename).toBeCalledTimes(1) - expect(Module._resolveFilename).toBeCalledWith('/var/nuxt/resolver', { paths: '/var/nuxt/node_modules' }) + expect(require.resolve).toBeCalledTimes(1) + expect(require.resolve).toBeCalledWith('/var/nuxt/resolver', { paths: '/var/nuxt/node_modules' }) }) test('should return undefined when module is not found', () => { - const resolver = new Resolver({ - options: { modulesDir: '/var/nuxt/node_modules' } - }) - Module._resolveFilename = jest.fn(() => { + require.resolve = jest.fn(() => { const err = new Error() err.code = 'MODULE_NOT_FOUND' throw err - }) + }); + const resolver = new Resolver({ + options: { modulesDir: '/var/nuxt/node_modules' } + }, require.resolve) const modulePath = resolver.resolveModule('/var/nuxt/resolver') expect(modulePath).toBeUndefined() - expect(Module._resolveFilename).toBeCalledTimes(1) + expect(require.resolve).toBeCalledTimes(1) }) - test('should throw error when _resolveFilename failed', () => { - const resolver = new Resolver({ - options: { modulesDir: '/var/nuxt/node_modules' } - }) - Module._resolveFilename = jest.fn(() => { + test('should throw error when require.resolve failed', () => { + require.resolve = jest.fn(() => { throw new Error('resolve failed') }) + const resolver = new Resolver({ + options: { modulesDir: '/var/nuxt/node_modules' } + }, require.resolve) expect(() => resolver.resolveModule('/var/nuxt/resolver')).toThrow('resolve failed') }) From dbb9b73b812d931b1072bb752a1f59eb2b39240f Mon Sep 17 00:00:00 2001 From: globegitter Date: Thu, 23 May 2019 13:57:25 +0200 Subject: [PATCH 5/7] Lint fix. --- packages/core/test/resolver.test.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/core/test/resolver.test.js b/packages/core/test/resolver.test.js index eafbdf2831ef..02adf17930de 100644 --- a/packages/core/test/resolver.test.js +++ b/packages/core/test/resolver.test.js @@ -32,12 +32,12 @@ describe('core: resolver', () => { }) test('should call require.resolve in resolveModule', () => { - require.resolve = jest.fn(() => '/var/nuxt/resolver/module'); + require.resolve = jest.fn(() => '/var/nuxt/resolver/module') const resolver = new Resolver( { options: { modulesDir: '/var/nuxt/node_modules' } }, - require.resolve, + require.resolve ) const modulePath = resolver.resolveModule('/var/nuxt/resolver') @@ -52,7 +52,7 @@ describe('core: resolver', () => { const err = new Error() err.code = 'MODULE_NOT_FOUND' throw err - }); + }) const resolver = new Resolver({ options: { modulesDir: '/var/nuxt/node_modules' } }, require.resolve) From d3f19aada4347b215a54ddaf9bdc80dac552868b Mon Sep 17 00:00:00 2001 From: Clark Du Date: Sat, 25 May 2019 20:37:49 +0100 Subject: [PATCH 6/7] refactor some vode --- packages/core/src/resolver.js | 14 ++++++++----- packages/core/test/resolver.test.js | 31 ++++++++++++----------------- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/packages/core/src/resolver.js b/packages/core/src/resolver.js index 50a138fa788e..a0a1b6ae96c9 100644 --- a/packages/core/src/resolver.js +++ b/packages/core/src/resolver.js @@ -6,7 +6,7 @@ import esm from 'esm' import { startsWithRootAlias, startsWithSrcAlias } from '@nuxt/utils' export default class Resolver { - constructor(nuxt, moduleResolver) { + constructor(nuxt) { this.nuxt = nuxt this.options = this.nuxt.options @@ -19,19 +19,23 @@ export default class Resolver { // ESM Loader this.esm = esm(module) - // module resolver - this.moduleResolver = moduleResolver || require.resolve + this._resolve = require.resolve } resolveModule(path) { try { - return this.moduleResolver(path, { + return this._resolve(path, { paths: this.options.modulesDir }) } catch (error) { - if (error.code === 'MODULE_NOT_FOUND' || error.message.includes('Cannot resolve module')) { + if (error.code === 'MODULE_NOT_FOUND') { return undefined } else { + // TODO: remove after https://github.com/facebook/jest/pull/8487 released + if (process.env.NODE_ENV === 'test' && + error.message.startsWith('Cannot resolve module')) { + return undefined + } throw error } } diff --git a/packages/core/test/resolver.test.js b/packages/core/test/resolver.test.js index 02adf17930de..b1bcd6d52ae5 100644 --- a/packages/core/test/resolver.test.js +++ b/packages/core/test/resolver.test.js @@ -32,44 +32,39 @@ describe('core: resolver', () => { }) test('should call require.resolve in resolveModule', () => { - require.resolve = jest.fn(() => '/var/nuxt/resolver/module') - const resolver = new Resolver( - { - options: { modulesDir: '/var/nuxt/node_modules' } - }, - require.resolve - ) + const resolver = new Resolver({ + options: { modulesDir: '/var/nuxt/node_modules' } + }) + const resolve = resolver._resolve = jest.fn(() => '/var/nuxt/resolver/module') const modulePath = resolver.resolveModule('/var/nuxt/resolver') expect(modulePath).toEqual('/var/nuxt/resolver/module') - expect(require.resolve).toBeCalledTimes(1) - expect(require.resolve).toBeCalledWith('/var/nuxt/resolver', { paths: '/var/nuxt/node_modules' }) + expect(resolve).toBeCalledTimes(1) + expect(resolve).toBeCalledWith('/var/nuxt/resolver', { paths: '/var/nuxt/node_modules' }) }) test('should return undefined when module is not found', () => { - require.resolve = jest.fn(() => { + const resolver = new Resolver({ + options: { modulesDir: '/var/nuxt/node_modules' } + }) + const resolve = resolver._resolve = jest.fn(() => { const err = new Error() err.code = 'MODULE_NOT_FOUND' throw err }) - const resolver = new Resolver({ - options: { modulesDir: '/var/nuxt/node_modules' } - }, require.resolve) const modulePath = resolver.resolveModule('/var/nuxt/resolver') expect(modulePath).toBeUndefined() - expect(require.resolve).toBeCalledTimes(1) + expect(resolve).toBeCalledTimes(1) }) test('should throw error when require.resolve failed', () => { - require.resolve = jest.fn(() => { - throw new Error('resolve failed') - }) const resolver = new Resolver({ options: { modulesDir: '/var/nuxt/node_modules' } - }, require.resolve) + }) + resolver._resolve = jest.fn(() => { throw new Error('resolve failed') }) expect(() => resolver.resolveModule('/var/nuxt/resolver')).toThrow('resolve failed') }) From 05de98cee52b3e3801a81fd7e523bfe09f431513 Mon Sep 17 00:00:00 2001 From: Clark Du Date: Sat, 25 May 2019 20:49:14 +0100 Subject: [PATCH 7/7] simplify code --- packages/core/src/resolver.js | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/core/src/resolver.js b/packages/core/src/resolver.js index a0a1b6ae96c9..d2e840559502 100644 --- a/packages/core/src/resolver.js +++ b/packages/core/src/resolver.js @@ -28,13 +28,10 @@ export default class Resolver { paths: this.options.modulesDir }) } catch (error) { - if (error.code === 'MODULE_NOT_FOUND') { - return undefined - } else { + if (error.code !== 'MODULE_NOT_FOUND') { // TODO: remove after https://github.com/facebook/jest/pull/8487 released - if (process.env.NODE_ENV === 'test' && - error.message.startsWith('Cannot resolve module')) { - return undefined + if (process.env.NODE_ENV === 'test' && error.message.startsWith('Cannot resolve module')) { + return } throw error }