perf(core): skip esm for node_modules and non .js files (#5220)

This commit is contained in:
Pooya Parsa 2019-03-13 13:54:39 +03:30 committed by GitHub
parent adf423a57f
commit aabb1f69e7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 30 additions and 25 deletions

View File

@ -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
@ -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') {

View File

@ -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

View File

@ -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),
@ -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),

View File

@ -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)
@ -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')
})
@ -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')
})
@ -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' })
})
@ -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)
})
@ -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', () => {
@ -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)
@ -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)

View File

@ -1 +1,3 @@
export default () => {}
export default function testTSModule() {
}

View File

@ -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