diff --git a/packages/core/src/module.js b/packages/core/src/module.js index 3ae1279d1d..e6fbc251ac 100644 --- a/packages/core/src/module.js +++ b/packages/core/src/module.js @@ -115,8 +115,8 @@ export default class ModuleContainer { let options let handler - // Type 1: String - if (typeof moduleOpts === 'string') { + // Type 1: String or Function + if (typeof moduleOpts === 'string' || typeof moduleOpts === 'function') { src = moduleOpts } else if (Array.isArray(moduleOpts)) { // Type 2: Babel style array @@ -126,6 +126,11 @@ export default class ModuleContainer { ({ src, options, handler } = moduleOpts) } + // Define handler if src is a function + if (typeof src === 'function') { + handler = src + } + // Resolve handler if (!handler) { handler = this.nuxt.resolver.requireModule(src) diff --git a/packages/core/test/module.test.js b/packages/core/test/module.test.js index 20265f44f4..f7d732594a 100644 --- a/packages/core/test/module.test.js +++ b/packages/core/test/module.test.js @@ -309,6 +309,31 @@ describe('core: module', () => { expect(result).toEqual({ src: 'moduleTest', options: {} }) }) + test('should add function module', async () => { + const module = new ModuleContainer({ + resolver: { requireModule }, + options: {} + }) + + const functionModule = function (options) { + return Promise.resolve(options) + } + + functionModule.meta = { name: 'moduleTest' } + + const result = await module.addModule(functionModule) + + expect(requireModule).not.toBeCalled() + expect(module.requiredModules).toEqual({ + moduleTest: { + handler: expect.any(Function), + options: undefined, + src: functionModule + } + }) + expect(result).toEqual({ }) + }) + test('should add array module', async () => { const module = new ModuleContainer({ resolver: { requireModule },