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 // Resolve handler
if (!handler) { if (!handler) {
handler = this.nuxt.resolver.requireModule(src) handler = this.nuxt.resolver.requireModule(src, { useESM: true })
} }
// Validate handler // Validate handler
@ -152,7 +152,10 @@ export default class ModuleContainer {
} }
// Resolve module meta // 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 // Update requiredModules
if (typeof key === 'string') { if (typeof key === 'string') {

View File

@ -135,17 +135,17 @@ export default class Resolver {
lastError = e lastError = e
} }
// Disable esm for ts files by default // By default use esm only for js,mjs files outside of node_modules
if (useESM === undefined && /.ts$/.test(resolvedPath)) { if (useESM === undefined) {
useESM = false useESM = /.(js|mjs)$/.test(resolvedPath) && !/node_modules/.test(resolvedPath)
} }
// Try to require // Try to require
try { try {
if (useESM === false) { if (useESM) {
requiredModule = require(resolvedPath)
} else {
requiredModule = this.esm(resolvedPath) requiredModule = this.esm(resolvedPath)
} else {
requiredModule = require(resolvedPath)
} }
} catch (e) { } catch (e) {
lastError = e lastError = e

View File

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

View File

@ -352,7 +352,7 @@ describe('core: resolver', () => {
}) })
fs.existsSync = jest.fn(() => true) 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.' const warnMsg = 'Using module is deprecated and will be removed in Nuxt 3. Use `isModule` instead.'
expect(consola.warn).toBeCalledTimes(1) expect(consola.warn).toBeCalledTimes(1)
expect(consola.warn).toBeCalledWith(warnMsg) expect(consola.warn).toBeCalledWith(warnMsg)
@ -364,10 +364,10 @@ describe('core: resolver', () => {
const resolver = new Resolver({ const resolver = new Resolver({
options: {} options: {}
}) })
resolver.resolvePath = jest.fn() resolver.resolvePath = x => x
resolver.esm = jest.fn(() => ({ default: 'resolved module' })) 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') expect(resolvedModule).toEqual('resolved module')
}) })
@ -376,10 +376,10 @@ describe('core: resolver', () => {
const resolver = new Resolver({ const resolver = new Resolver({
options: {} options: {}
}) })
resolver.resolvePath = jest.fn() resolver.resolvePath = x => x
resolver.esm = jest.fn(() => 'resolved module') 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') expect(resolvedModule).toEqual('resolved module')
}) })
@ -388,10 +388,10 @@ describe('core: resolver', () => {
const resolver = new Resolver({ const resolver = new Resolver({
options: {} options: {}
}) })
resolver.resolvePath = jest.fn() resolver.resolvePath = x => x
resolver.esm = jest.fn(() => ({ default: 'resolved module' })) 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' }) expect(resolvedModule).toEqual({ default: 'resolved module' })
}) })
@ -403,7 +403,7 @@ describe('core: resolver', () => {
resolver.resolvePath = jest.fn(() => 'path') resolver.resolvePath = jest.fn(() => 'path')
resolver.esm = jest.fn(() => ({ default: 'resolved module' })) 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) expect(resolvedModule).toBe(path)
}) })
@ -427,7 +427,7 @@ describe('core: resolver', () => {
resolver.resolvePath = jest.fn(() => { throw new Error('resolve failed') }) resolver.resolvePath = jest.fn(() => { throw new Error('resolve failed') })
resolver.esm = jest.fn(() => undefined) 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', () => { test('should throw last error', () => {
@ -437,17 +437,17 @@ describe('core: resolver', () => {
resolver.resolvePath = jest.fn(() => { throw new Error('resolve failed') }) resolver.resolvePath = jest.fn(() => { throw new Error('resolve failed') })
resolver.esm = jest.fn(() => { throw new Error('resolve esm 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', () => { test('should display deprecated alias options', () => {
const resolver = new Resolver({ const resolver = new Resolver({
options: {} options: {}
}) })
resolver.resolvePath = jest.fn() resolver.resolvePath = x => x
resolver.esm = jest.fn() 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.' const warnMsg = 'Using alias is deprecated and will be removed in Nuxt 3. Use `isAlias` instead.'
expect(consola.warn).toBeCalledTimes(1) expect(consola.warn).toBeCalledTimes(1)
expect(consola.warn).toBeCalledWith(warnMsg) expect(consola.warn).toBeCalledWith(warnMsg)
@ -460,7 +460,7 @@ describe('core: resolver', () => {
resolver.resolvePath = jest.fn() resolver.resolvePath = jest.fn()
resolver.esm = 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.' const warnMsg = 'Using esm is deprecated and will be removed in Nuxt 3. Use `useESM` instead.'
expect(consola.warn).toBeCalledTimes(1) expect(consola.warn).toBeCalledTimes(1)
expect(consola.warn).toBeCalledWith(warnMsg) 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', () => { 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 // Close server and ask nuxt to stop listening to file changes