From b0c33989df2a5401540ad435a90247ef1d13f276 Mon Sep 17 00:00:00 2001 From: Erica Pisani Date: Fri, 26 Aug 2022 09:54:34 -0400 Subject: [PATCH 1/2] feat: improve messaging on middleware detection --- packages/runtime/src/helpers/dev.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/runtime/src/helpers/dev.ts b/packages/runtime/src/helpers/dev.ts index fea2b24aa5..30f0b11ff1 100644 --- a/packages/runtime/src/helpers/dev.ts +++ b/packages/runtime/src/helpers/dev.ts @@ -19,22 +19,28 @@ export const onPreDev: OnPreBuild = async ({ constants, netlifyConfig }) => { // Ignore if it doesn't exist }) await writeDevEdgeFunction(constants) + + let middlewareDetected = false if (!existsSync(resolve(base, 'middleware.ts')) && !existsSync(resolve(base, 'middleware.js'))) { console.log( - "No middleware found. Create a 'middleware.ts' or 'middleware.js' file in your project root to add custom middleware.", + "No middleware found. If you did intend to use middleware, create a 'middleware.ts' or 'middleware.js' file in your project root to add custom middleware.", ) } else { console.log('Watching for changes in Next.js middleware...') + middlewareDetected = true } // Eventually we might want to do this via esbuild's API, but for now the CLI works fine const common = [`--bundle`, `--outdir=${resolve('.netlify')}`, `--format=esm`, `--target=esnext`, '--watch'] + const esbuildTSArgs = middlewareDetected ? [...common, resolve(base, 'middleware.ts')] : common + const esbuildJSArgs = middlewareDetected ? [...common, resolve(base, 'middleware.js')] : common + // TypeScript - execa(`esbuild`, [...common, resolve(base, 'middleware.ts')], { all: true }).all.pipe(process.stdout) + execa(`esbuild`, esbuildTSArgs, { all: true }).all.pipe(process.stdout) // JavaScript - execa(`esbuild`, [...common, resolve(base, 'middleware.js')], { all: true }).all.pipe(process.stdout) + execa(`esbuild`, esbuildJSArgs, { all: true }).all.pipe(process.stdout) // Don't return the promise because we don't want to wait for the child process to finish } From ef6af2604f8284f807b043feb15a2b4498b5d685 Mon Sep 17 00:00:00 2001 From: Erica Pisani Date: Fri, 26 Aug 2022 11:17:29 -0400 Subject: [PATCH 2/2] refactor: don't use execa if there's no middleware to bundle --- packages/runtime/src/helpers/dev.ts | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/packages/runtime/src/helpers/dev.ts b/packages/runtime/src/helpers/dev.ts index 30f0b11ff1..3665027d1d 100644 --- a/packages/runtime/src/helpers/dev.ts +++ b/packages/runtime/src/helpers/dev.ts @@ -20,27 +20,21 @@ export const onPreDev: OnPreBuild = async ({ constants, netlifyConfig }) => { }) await writeDevEdgeFunction(constants) - let middlewareDetected = false if (!existsSync(resolve(base, 'middleware.ts')) && !existsSync(resolve(base, 'middleware.js'))) { console.log( "No middleware found. If you did intend to use middleware, create a 'middleware.ts' or 'middleware.js' file in your project root to add custom middleware.", ) } else { console.log('Watching for changes in Next.js middleware...') - middlewareDetected = true - } - // Eventually we might want to do this via esbuild's API, but for now the CLI works fine - - const common = [`--bundle`, `--outdir=${resolve('.netlify')}`, `--format=esm`, `--target=esnext`, '--watch'] - const esbuildTSArgs = middlewareDetected ? [...common, resolve(base, 'middleware.ts')] : common - const esbuildJSArgs = middlewareDetected ? [...common, resolve(base, 'middleware.js')] : common + // Eventually we might want to do this via esbuild's API, but for now the CLI works fine + const common = [`--bundle`, `--outdir=${resolve('.netlify')}`, `--format=esm`, `--target=esnext`, '--watch'] - // TypeScript - execa(`esbuild`, esbuildTSArgs, { all: true }).all.pipe(process.stdout) + // TypeScript + execa(`esbuild`, [...common, resolve(base, 'middleware.ts')], { all: true }).all.pipe(process.stdout) - // JavaScript - execa(`esbuild`, esbuildJSArgs, { all: true }).all.pipe(process.stdout) - - // Don't return the promise because we don't want to wait for the child process to finish + // JavaScript + execa(`esbuild`, [...common, resolve(base, 'middleware.js')], { all: true }).all.pipe(process.stdout) + // Don't return the promise because we don't want to wait for the child process to finish + } }