Skip to content

Commit

Permalink
perf(core): skip esm for node_modules and non .js files (#5220)
Browse files Browse the repository at this point in the history
  • Loading branch information
pi0 authored Mar 13, 2019
1 parent adf423a commit aabb1f6
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 25 deletions.
7 changes: 5 additions & 2 deletions packages/core/src/module.js
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ export default class ModuleContainer {

// Resolve handler
if (!handler) {
handler = this.nuxt.resolver.requireModule(src)
handler = this.nuxt.resolver.requireModule(src, { useESM: true })
}

// Validate handler
Expand All @@ -152,7 +152,10 @@ export default class ModuleContainer {
}

// Resolve module meta
const key = (handler.meta && handler.meta.name) || handler.name || src
let key = (handler.meta && handler.meta.name) || handler.name
if (!key || key === 'default') {
key = src
}

// Update requiredModules
if (typeof key === 'string') {
Expand Down
12 changes: 6 additions & 6 deletions packages/core/src/resolver.js
Original file line number Diff line number Diff line change
Expand Up @@ -135,17 +135,17 @@ export default class Resolver {
lastError = e
}

// Disable esm for ts files by default
if (useESM === undefined && /.ts$/.test(resolvedPath)) {
useESM = false
// By default use esm only for js,mjs files outside of node_modules
if (useESM === undefined) {
useESM = /.(js|mjs)$/.test(resolvedPath) && !/node_modules/.test(resolvedPath)
}

// Try to require
try {
if (useESM === false) {
requiredModule = require(resolvedPath)
} else {
if (useESM) {
requiredModule = this.esm(resolvedPath)
} else {
requiredModule = require(resolvedPath)
}
} catch (e) {
lastError = e
Expand Down
4 changes: 2 additions & 2 deletions packages/core/test/module.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -330,7 +330,7 @@ describe('core: module', () => {
const result = await module.addModule('moduleTest')

expect(requireModule).toBeCalledTimes(1)
expect(requireModule).toBeCalledWith('moduleTest')
expect(requireModule).toBeCalledWith('moduleTest', { useESM: true })
expect(module.requiredModules).toEqual({
moduleTest: {
handler: expect.any(Function),
Expand Down Expand Up @@ -379,7 +379,7 @@ describe('core: module', () => {
const result = await module.addModule(['moduleTest', { test: true }])

expect(requireModule).toBeCalledTimes(1)
expect(requireModule).toBeCalledWith('moduleTest')
expect(requireModule).toBeCalledWith('moduleTest', { useESM: true })
expect(module.requiredModules).toEqual({
moduleTest: {
handler: expect.any(Function),
Expand Down
26 changes: 13 additions & 13 deletions packages/core/test/resolver.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -352,7 +352,7 @@ describe('core: resolver', () => {
})
fs.existsSync = jest.fn(() => true)

resolver.resolvePath('/var/nuxt/resolver/file', { module: true })
resolver.resolvePath('/var/nuxt/resolver/file.js', { module: true })
const warnMsg = 'Using module is deprecated and will be removed in Nuxt 3. Use `isModule` instead.'
expect(consola.warn).toBeCalledTimes(1)
expect(consola.warn).toBeCalledWith(warnMsg)
Expand All @@ -364,10 +364,10 @@ describe('core: resolver', () => {
const resolver = new Resolver({
options: {}
})
resolver.resolvePath = jest.fn()
resolver.resolvePath = x => x
resolver.esm = jest.fn(() => ({ default: 'resolved module' }))

const resolvedModule = resolver.requireModule('/var/nuxt/resolver/module')
const resolvedModule = resolver.requireModule('/var/nuxt/resolver/module.js')

expect(resolvedModule).toEqual('resolved module')
})
Expand All @@ -376,10 +376,10 @@ describe('core: resolver', () => {
const resolver = new Resolver({
options: {}
})
resolver.resolvePath = jest.fn()
resolver.resolvePath = x => x
resolver.esm = jest.fn(() => 'resolved module')

const resolvedModule = resolver.requireModule('/var/nuxt/resolver/module')
const resolvedModule = resolver.requireModule('/var/nuxt/resolver/module.js')

expect(resolvedModule).toEqual('resolved module')
})
Expand All @@ -388,10 +388,10 @@ describe('core: resolver', () => {
const resolver = new Resolver({
options: {}
})
resolver.resolvePath = jest.fn()
resolver.resolvePath = x => x
resolver.esm = jest.fn(() => ({ default: 'resolved module' }))

const resolvedModule = resolver.requireModule('/var/nuxt/resolver/module', { interopDefault: false })
const resolvedModule = resolver.requireModule('/var/nuxt/resolver/module.js', { interopDefault: false })

expect(resolvedModule).toEqual({ default: 'resolved module' })
})
Expand All @@ -403,7 +403,7 @@ describe('core: resolver', () => {
resolver.resolvePath = jest.fn(() => 'path')
resolver.esm = jest.fn(() => ({ default: 'resolved module' }))

const resolvedModule = resolver.requireModule('path', { esm: false })
const resolvedModule = resolver.requireModule('path', { useESM: false })

expect(resolvedModule).toBe(path)
})
Expand All @@ -427,7 +427,7 @@ describe('core: resolver', () => {
resolver.resolvePath = jest.fn(() => { throw new Error('resolve failed') })
resolver.esm = jest.fn(() => undefined)

expect(() => resolver.requireModule('/var/nuxt/resolver/module')).toThrow('resolve failed')
expect(() => resolver.requireModule('/var/nuxt/resolver/module.js')).toThrow('resolve failed')
})

test('should throw last error', () => {
Expand All @@ -437,17 +437,17 @@ describe('core: resolver', () => {
resolver.resolvePath = jest.fn(() => { throw new Error('resolve failed') })
resolver.esm = jest.fn(() => { throw new Error('resolve esm failed') })

expect(() => resolver.requireModule('/var/nuxt/resolver/module')).toThrow('resolve esm failed')
expect(() => resolver.requireModule('/var/nuxt/resolver/module.js')).toThrow('resolve esm failed')
})

test('should display deprecated alias options', () => {
const resolver = new Resolver({
options: {}
})
resolver.resolvePath = jest.fn()
resolver.resolvePath = x => x
resolver.esm = jest.fn()

resolver.requireModule('/var/nuxt/resolver/file', { alias: true })
resolver.requireModule('/var/nuxt/resolver/file.js', { alias: true })
const warnMsg = 'Using alias is deprecated and will be removed in Nuxt 3. Use `isAlias` instead.'
expect(consola.warn).toBeCalledTimes(1)
expect(consola.warn).toBeCalledWith(warnMsg)
Expand All @@ -460,7 +460,7 @@ describe('core: resolver', () => {
resolver.resolvePath = jest.fn()
resolver.esm = jest.fn()

resolver.requireModule('/var/nuxt/resolver/file', { esm: true })
resolver.requireModule('/var/nuxt/resolver/file.js', { esm: true })
const warnMsg = 'Using esm is deprecated and will be removed in Nuxt 3. Use `useESM` instead.'
expect(consola.warn).toBeCalledTimes(1)
expect(consola.warn).toBeCalledWith(warnMsg)
Expand Down
4 changes: 3 additions & 1 deletion test/fixtures/typescript/modules/module.ts
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
export default () => {}
export default function testTSModule() {

}
2 changes: 1 addition & 1 deletion test/unit/typescript.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ describe('typescript', () => {
})

test('TS module successfully required', () => {
expect(nuxt.moduleContainer.requiredModules).toHaveProperty('~/modules/module')
expect(nuxt.moduleContainer.requiredModules.testTSModule).toBeDefined()
})

// Close server and ask nuxt to stop listening to file changes
Expand Down

0 comments on commit aabb1f6

Please sign in to comment.