mirror of
https://github.com/nuxt/nuxt.git
synced 2025-03-01 17:23:59 +00:00
feat: support devModules
option (#5102)
This commit is contained in:
parent
0751faa9c8
commit
e87711c5e7
@ -23,6 +23,7 @@ export default () => ({
|
|||||||
css: [],
|
css: [],
|
||||||
|
|
||||||
modules: [],
|
modules: [],
|
||||||
|
devModules: [],
|
||||||
|
|
||||||
layouts: {},
|
layouts: {},
|
||||||
|
|
||||||
|
@ -141,6 +141,7 @@ Object {
|
|||||||
"css": Array [],
|
"css": Array [],
|
||||||
"debug": false,
|
"debug": false,
|
||||||
"dev": false,
|
"dev": false,
|
||||||
|
"devModules": Array [],
|
||||||
"dir": Object {
|
"dir": Object {
|
||||||
"assets": "assets",
|
"assets": "assets",
|
||||||
"layouts": "layouts",
|
"layouts": "layouts",
|
||||||
|
@ -131,6 +131,7 @@ Object {
|
|||||||
"css": Array [],
|
"css": Array [],
|
||||||
"debug": undefined,
|
"debug": undefined,
|
||||||
"dev": false,
|
"dev": false,
|
||||||
|
"devModules": Array [],
|
||||||
"dir": Object {
|
"dir": Object {
|
||||||
"assets": "assets",
|
"assets": "assets",
|
||||||
"layouts": "layouts",
|
"layouts": "layouts",
|
||||||
@ -459,6 +460,7 @@ Object {
|
|||||||
"css": Array [],
|
"css": Array [],
|
||||||
"debug": undefined,
|
"debug": undefined,
|
||||||
"dev": false,
|
"dev": false,
|
||||||
|
"devModules": Array [],
|
||||||
"dir": Object {
|
"dir": Object {
|
||||||
"assets": "assets",
|
"assets": "assets",
|
||||||
"layouts": "layouts",
|
"layouts": "layouts",
|
||||||
|
@ -16,6 +16,11 @@ export default class ModuleContainer {
|
|||||||
// Call before hook
|
// Call before hook
|
||||||
await this.nuxt.callHook('modules:before', this, this.options.modules)
|
await this.nuxt.callHook('modules:before', this, this.options.modules)
|
||||||
|
|
||||||
|
if (this.options.devModules && !this.options._start) {
|
||||||
|
// Load every devModule in sequence
|
||||||
|
await sequence(this.options.devModules, this.addModule.bind(this))
|
||||||
|
}
|
||||||
|
|
||||||
// Load every module in sequence
|
// Load every module in sequence
|
||||||
await sequence(this.options.modules, this.addModule.bind(this))
|
await sequence(this.options.modules, this.addModule.bind(this))
|
||||||
|
|
||||||
@ -131,6 +136,11 @@ export default class ModuleContainer {
|
|||||||
handler = src
|
handler = src
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Prevent adding devModules-listed entries in production
|
||||||
|
if (this.options.devModules.includes(handler) && this.options._start) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// Resolve handler
|
// Resolve handler
|
||||||
if (!handler) {
|
if (!handler) {
|
||||||
handler = this.nuxt.resolver.requireModule(src)
|
handler = this.nuxt.resolver.requireModule(src)
|
||||||
|
@ -15,6 +15,11 @@ jest.mock('@nuxt/utils', () => ({
|
|||||||
chainFn: jest.fn(() => 'chainedFn')
|
chainFn: jest.fn(() => 'chainedFn')
|
||||||
}))
|
}))
|
||||||
|
|
||||||
|
const defaultOptions = {
|
||||||
|
modules: [],
|
||||||
|
devModules: []
|
||||||
|
}
|
||||||
|
|
||||||
describe('core: module', () => {
|
describe('core: module', () => {
|
||||||
const requireModule = jest.fn(src => options => Promise.resolve({ src, options }))
|
const requireModule = jest.fn(src => options => Promise.resolve({ src, options }))
|
||||||
|
|
||||||
@ -41,6 +46,7 @@ describe('core: module', () => {
|
|||||||
test('should call hooks and addModule when ready', async () => {
|
test('should call hooks and addModule when ready', async () => {
|
||||||
const nuxt = {
|
const nuxt = {
|
||||||
options: {
|
options: {
|
||||||
|
...defaultOptions,
|
||||||
modules: [jest.fn(), jest.fn()]
|
modules: [jest.fn(), jest.fn()]
|
||||||
},
|
},
|
||||||
callHook: jest.fn()
|
callHook: jest.fn()
|
||||||
@ -60,7 +66,9 @@ describe('core: module', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
test('should display deprecated message for addVendor', () => {
|
test('should display deprecated message for addVendor', () => {
|
||||||
new ModuleContainer({}).addVendor()
|
new ModuleContainer({
|
||||||
|
...defaultOptions
|
||||||
|
}).addVendor()
|
||||||
|
|
||||||
expect(consola.warn).toBeCalledTimes(1)
|
expect(consola.warn).toBeCalledTimes(1)
|
||||||
expect(consola.warn).toBeCalledWith('addVendor has been deprecated due to webpack4 optimization')
|
expect(consola.warn).toBeCalledWith('addVendor has been deprecated due to webpack4 optimization')
|
||||||
@ -69,6 +77,7 @@ describe('core: module', () => {
|
|||||||
test('should add string template', () => {
|
test('should add string template', () => {
|
||||||
const module = new ModuleContainer({
|
const module = new ModuleContainer({
|
||||||
options: {
|
options: {
|
||||||
|
...defaultOptions,
|
||||||
build: {
|
build: {
|
||||||
templates: []
|
templates: []
|
||||||
}
|
}
|
||||||
@ -88,6 +97,7 @@ describe('core: module', () => {
|
|||||||
test('should add object template', () => {
|
test('should add object template', () => {
|
||||||
const module = new ModuleContainer({
|
const module = new ModuleContainer({
|
||||||
options: {
|
options: {
|
||||||
|
...defaultOptions,
|
||||||
build: {
|
build: {
|
||||||
templates: []
|
templates: []
|
||||||
}
|
}
|
||||||
@ -109,6 +119,7 @@ describe('core: module', () => {
|
|||||||
|
|
||||||
test('should use filename in preference to calculation', () => {
|
test('should use filename in preference to calculation', () => {
|
||||||
const module = new ModuleContainer({
|
const module = new ModuleContainer({
|
||||||
|
...defaultOptions,
|
||||||
options: {
|
options: {
|
||||||
build: {
|
build: {
|
||||||
templates: []
|
templates: []
|
||||||
@ -130,13 +141,21 @@ describe('core: module', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
test('should throw error when template invalid', () => {
|
test('should throw error when template invalid', () => {
|
||||||
const module = new ModuleContainer({})
|
const module = new ModuleContainer({
|
||||||
|
options: {
|
||||||
|
...defaultOptions
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
expect(() => module.addTemplate()).toThrow('Invalid template: undefined')
|
expect(() => module.addTemplate()).toThrow('Invalid template: undefined')
|
||||||
})
|
})
|
||||||
|
|
||||||
test('should throw error when template not found', () => {
|
test('should throw error when template not found', () => {
|
||||||
const module = new ModuleContainer({})
|
const module = new ModuleContainer({
|
||||||
|
options: {
|
||||||
|
...defaultOptions
|
||||||
|
}
|
||||||
|
})
|
||||||
fs.existsSync = jest.fn(() => false)
|
fs.existsSync = jest.fn(() => false)
|
||||||
|
|
||||||
expect(() => module.addTemplate('/var/nuxt/test')).toThrow('Template src not found: /var/nuxt/test')
|
expect(() => module.addTemplate('/var/nuxt/test')).toThrow('Template src not found: /var/nuxt/test')
|
||||||
@ -147,6 +166,7 @@ describe('core: module', () => {
|
|||||||
test('should add plugin into module', () => {
|
test('should add plugin into module', () => {
|
||||||
const module = new ModuleContainer({
|
const module = new ModuleContainer({
|
||||||
options: {
|
options: {
|
||||||
|
...defaultOptions,
|
||||||
buildDir: '/var/nuxt/build',
|
buildDir: '/var/nuxt/build',
|
||||||
plugins: []
|
plugins: []
|
||||||
}
|
}
|
||||||
@ -165,6 +185,7 @@ describe('core: module', () => {
|
|||||||
test('should add layout into module', () => {
|
test('should add layout into module', () => {
|
||||||
const module = new ModuleContainer({
|
const module = new ModuleContainer({
|
||||||
options: {
|
options: {
|
||||||
|
...defaultOptions,
|
||||||
layouts: {}
|
layouts: {}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -181,6 +202,7 @@ describe('core: module', () => {
|
|||||||
test('should display deprecated message when registration is duplicate', () => {
|
test('should display deprecated message when registration is duplicate', () => {
|
||||||
const module = new ModuleContainer({
|
const module = new ModuleContainer({
|
||||||
options: {
|
options: {
|
||||||
|
...defaultOptions,
|
||||||
layouts: {
|
layouts: {
|
||||||
'test-layout': 'test.template'
|
'test-layout': 'test.template'
|
||||||
}
|
}
|
||||||
@ -200,6 +222,7 @@ describe('core: module', () => {
|
|||||||
test('should register error layout at same time', () => {
|
test('should register error layout at same time', () => {
|
||||||
const module = new ModuleContainer({
|
const module = new ModuleContainer({
|
||||||
options: {
|
options: {
|
||||||
|
...defaultOptions,
|
||||||
layouts: {}
|
layouts: {}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -219,6 +242,7 @@ describe('core: module', () => {
|
|||||||
test('should add error layout', () => {
|
test('should add error layout', () => {
|
||||||
const module = new ModuleContainer({
|
const module = new ModuleContainer({
|
||||||
options: {
|
options: {
|
||||||
|
...defaultOptions,
|
||||||
rootDir: '/var/nuxt',
|
rootDir: '/var/nuxt',
|
||||||
buildDir: '/var/nuxt/build',
|
buildDir: '/var/nuxt/build',
|
||||||
layouts: {}
|
layouts: {}
|
||||||
@ -233,6 +257,7 @@ describe('core: module', () => {
|
|||||||
test('should add server middleware', () => {
|
test('should add server middleware', () => {
|
||||||
const module = new ModuleContainer({
|
const module = new ModuleContainer({
|
||||||
options: {
|
options: {
|
||||||
|
...defaultOptions,
|
||||||
serverMiddleware: []
|
serverMiddleware: []
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -248,6 +273,7 @@ describe('core: module', () => {
|
|||||||
const extend = () => {}
|
const extend = () => {}
|
||||||
const module = new ModuleContainer({
|
const module = new ModuleContainer({
|
||||||
options: {
|
options: {
|
||||||
|
...defaultOptions,
|
||||||
build: { extend }
|
build: { extend }
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -264,6 +290,7 @@ describe('core: module', () => {
|
|||||||
const extendRoutes = () => {}
|
const extendRoutes = () => {}
|
||||||
const module = new ModuleContainer({
|
const module = new ModuleContainer({
|
||||||
options: {
|
options: {
|
||||||
|
...defaultOptions,
|
||||||
router: { extendRoutes }
|
router: { extendRoutes }
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -278,7 +305,9 @@ describe('core: module', () => {
|
|||||||
|
|
||||||
test('should call addModule when require module', () => {
|
test('should call addModule when require module', () => {
|
||||||
const module = new ModuleContainer({
|
const module = new ModuleContainer({
|
||||||
options: {}
|
options: {
|
||||||
|
...defaultOptions
|
||||||
|
}
|
||||||
})
|
})
|
||||||
module.addModule = jest.fn()
|
module.addModule = jest.fn()
|
||||||
|
|
||||||
@ -292,7 +321,9 @@ describe('core: module', () => {
|
|||||||
test('should add string module', async () => {
|
test('should add string module', async () => {
|
||||||
const module = new ModuleContainer({
|
const module = new ModuleContainer({
|
||||||
resolver: { requireModule },
|
resolver: { requireModule },
|
||||||
options: {}
|
options: {
|
||||||
|
...defaultOptions
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const result = await module.addModule('moduleTest')
|
const result = await module.addModule('moduleTest')
|
||||||
@ -312,7 +343,9 @@ describe('core: module', () => {
|
|||||||
test('should add function module', async () => {
|
test('should add function module', async () => {
|
||||||
const module = new ModuleContainer({
|
const module = new ModuleContainer({
|
||||||
resolver: { requireModule },
|
resolver: { requireModule },
|
||||||
options: {}
|
options: {
|
||||||
|
...defaultOptions
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const functionModule = function (options) {
|
const functionModule = function (options) {
|
||||||
@ -337,7 +370,9 @@ describe('core: module', () => {
|
|||||||
test('should add array module', async () => {
|
test('should add array module', async () => {
|
||||||
const module = new ModuleContainer({
|
const module = new ModuleContainer({
|
||||||
resolver: { requireModule },
|
resolver: { requireModule },
|
||||||
options: {}
|
options: {
|
||||||
|
...defaultOptions
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const result = await module.addModule(['moduleTest', { test: true }])
|
const result = await module.addModule(['moduleTest', { test: true }])
|
||||||
@ -359,7 +394,9 @@ describe('core: module', () => {
|
|||||||
test('should add object module', async () => {
|
test('should add object module', async () => {
|
||||||
const module = new ModuleContainer({
|
const module = new ModuleContainer({
|
||||||
resolver: { requireModule },
|
resolver: { requireModule },
|
||||||
options: {}
|
options: {
|
||||||
|
...defaultOptions
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const result = await module.addModule({
|
const result = await module.addModule({
|
||||||
@ -386,7 +423,9 @@ describe('core: module', () => {
|
|||||||
test('should throw error when handler is not function', async () => {
|
test('should throw error when handler is not function', async () => {
|
||||||
const module = new ModuleContainer({
|
const module = new ModuleContainer({
|
||||||
resolver: { requireModule: () => false },
|
resolver: { requireModule: () => false },
|
||||||
options: {}
|
options: {
|
||||||
|
...defaultOptions
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
await expect(module.addModule('moduleTest')).rejects.toThrow('Module should export a function: moduleTest')
|
await expect(module.addModule('moduleTest')).rejects.toThrow('Module should export a function: moduleTest')
|
||||||
@ -395,7 +434,9 @@ describe('core: module', () => {
|
|||||||
test('should prevent multiple adding when requireOnce is enabled', async () => {
|
test('should prevent multiple adding when requireOnce is enabled', async () => {
|
||||||
const module = new ModuleContainer({
|
const module = new ModuleContainer({
|
||||||
resolver: { requireModule },
|
resolver: { requireModule },
|
||||||
options: {}
|
options: {
|
||||||
|
...defaultOptions
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const handler = jest.fn(() => true)
|
const handler = jest.fn(() => true)
|
||||||
|
Loading…
Reference in New Issue
Block a user