From e1f409ea51f85a69b9315b0bdc1e0d30b26abfe5 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Fri, 19 Feb 2021 14:01:08 +0000 Subject: [PATCH] fix: force rebuild on new files being added (#136) --- packages/nitro/src/build.ts | 25 ++++++++++++++++--------- packages/nitro/src/server/middleware.ts | 2 +- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/packages/nitro/src/build.ts b/packages/nitro/src/build.ts index f6f34006a8..f6ea30f02e 100644 --- a/packages/nitro/src/build.ts +++ b/packages/nitro/src/build.ts @@ -79,16 +79,8 @@ async function _build (nitroContext: NitroContext) { } } -async function _watch (nitroContext: NitroContext) { +function startRollupWatcher (nitroContext: NitroContext) { const watcher = rollupWatch(nitroContext.rollupConfig) - - nitroContext.scannedMiddleware = await scanMiddleware(nitroContext._nuxt.serverDir, - (middleware, event, file) => { - nitroContext.scannedMiddleware = middleware - watcher.emit(event, file) - } - ) - let start watcher.on('event', (event) => { @@ -114,4 +106,19 @@ async function _watch (nitroContext: NitroContext) { // consola.error(event.error) } }) + return watcher +} + +async function _watch (nitroContext: NitroContext) { + let watcher = startRollupWatcher(nitroContext) + + nitroContext.scannedMiddleware = await scanMiddleware(nitroContext._nuxt.serverDir, + (middleware, event) => { + nitroContext.scannedMiddleware = middleware + if (['add', 'addDir'].includes(event)) { + watcher.close() + watcher = startRollupWatcher(nitroContext) + } + } + ) } diff --git a/packages/nitro/src/server/middleware.ts b/packages/nitro/src/server/middleware.ts index 9017a8af52..2df0a074cc 100644 --- a/packages/nitro/src/server/middleware.ts +++ b/packages/nitro/src/server/middleware.ts @@ -23,7 +23,7 @@ function filesToMiddleware (files: string[], baseDir: string, basePath: string, .map(m => ({ ...m, ...overrides })) } -export function scanMiddleware (serverDir: string, onChange?: Function): Promise { +export function scanMiddleware (serverDir: string, onChange?: (results: ServerMiddleware[], event: 'add' | 'addDir' | 'change' | 'unlink' | 'unlinkDir', file: string) => void): Promise { const pattern = '**/*.{js,ts}' const globalDir = resolve(serverDir, 'middleware') const apiDir = resolve(serverDir, 'api')