mirror of
https://github.com/nuxt/nuxt.git
synced 2024-11-30 09:27:13 +00:00
perf(core): skip esm for node_modules and non .js files (#5220)
This commit is contained in:
parent
adf423a57f
commit
aabb1f69e7
@ -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') {
|
||||||
|
@ -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
|
||||||
|
@ -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),
|
||||||
|
@ -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)
|
||||||
|
4
test/fixtures/typescript/modules/module.ts
vendored
4
test/fixtures/typescript/modules/module.ts
vendored
@ -1 +1,3 @@
|
|||||||
export default () => {}
|
export default function testTSModule() {
|
||||||
|
|
||||||
|
}
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user