diff --git a/packages/nuxt/src/core/builder.ts b/packages/nuxt/src/core/builder.ts index d3b882e888b..a13dfc03a01 100644 --- a/packages/nuxt/src/core/builder.ts +++ b/packages/nuxt/src/core/builder.ts @@ -13,11 +13,11 @@ export async function build (nuxt: Nuxt) { if (nuxt.options.dev) { watch(nuxt) nuxt.hook('builder:watch', async (event, path) => { - if (event !== 'change' && /app|error|plugins/i.test(path)) { - if (path.match(/app/i)) { + if (event !== 'change' && /^(app\.|error\.|plugins\/|layouts\/)/i.test(path)) { + if (path.startsWith('app')) { app.mainComponent = null } - if (path.match(/error/i)) { + if (path.startsWith('error')) { app.errorComponent = null } await generateApp() @@ -38,7 +38,7 @@ export async function build (nuxt: Nuxt) { } function watch (nuxt: Nuxt) { - const watcher = chokidar.watch(nuxt.options.srcDir, { + const watcher = chokidar.watch(nuxt.options._layers.map(i => i.config.srcDir), { ...nuxt.options.watchers.chokidar, cwd: nuxt.options.srcDir, ignoreInitial: true, @@ -49,8 +49,7 @@ function watch (nuxt: Nuxt) { ] }) - const watchHook = debounce((event: 'add' | 'addDir' | 'change' | 'unlink' | 'unlinkDir', path: string) => nuxt.callHook('builder:watch', event, normalize(path))) - watcher.on('all', watchHook) + watcher.on('all', (event, path) => nuxt.callHook('builder:watch', event, normalize(path))) nuxt.hook('close', () => watcher.close()) return watcher } diff --git a/packages/nuxt/src/pages/module.ts b/packages/nuxt/src/pages/module.ts index 31853c8d7c1..4d22a2d4a5d 100644 --- a/packages/nuxt/src/pages/module.ts +++ b/packages/nuxt/src/pages/module.ts @@ -33,11 +33,10 @@ export default defineNuxtModule({ nuxt.hook('builder:watch', async (event, path) => { const dirs = [ nuxt.options.dir.pages, - nuxt.options.dir.layouts, nuxt.options.dir.middleware ].filter(Boolean) - const pathPattern = new RegExp(`^(${dirs.map(escapeRE).join('|')})/`) + const pathPattern = new RegExp(`(^|\\/)(${dirs.map(escapeRE).join('|')})/`) if (event !== 'change' && path.match(pathPattern)) { await nuxt.callHook('builder:generateApp') }