From a58ba301ebcd1d6d16041e2ba18f727c6df4b6fc Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Thu, 27 Oct 2022 16:00:40 -0700 Subject: [PATCH] Enable strict mode by default for app dir --- packages/next/build/webpack-config.ts | 12 +++++++++++- packages/next/client/app-index.tsx | 2 +- packages/next/server/config-shared.ts | 4 ++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/next/build/webpack-config.ts b/packages/next/build/webpack-config.ts index a51abb5acbac..9a95f3f2c694 100644 --- a/packages/next/build/webpack-config.ts +++ b/packages/next/build/webpack-config.ts @@ -244,7 +244,17 @@ export function getDefineEnv({ 'process.env.__NEXT_BUILD_INDICATOR_POSITION': JSON.stringify( config.devIndicators.buildActivityPosition ), - 'process.env.__NEXT_STRICT_MODE': JSON.stringify(config.reactStrictMode), + 'process.env.__NEXT_STRICT_MODE': JSON.stringify( + config.reactStrictMode === null ? false : config.reactStrictMode + ), + 'process.env.__NEXT_STRICT_MODE_APP': JSON.stringify( + // When next.config.js does not have reactStrictMode enabling appDir will enable it. + config.reactStrictMode === null + ? config.experimental.appDir + ? true + : false + : config.reactStrictMode + ), 'process.env.__NEXT_REACT_ROOT': JSON.stringify(hasReactRoot), 'process.env.__NEXT_OPTIMIZE_FONTS': JSON.stringify( !dev && config.optimizeFonts diff --git a/packages/next/client/app-index.tsx b/packages/next/client/app-index.tsx index 3fe2df062935..cc9c73882806 100644 --- a/packages/next/client/app-index.tsx +++ b/packages/next/client/app-index.tsx @@ -149,7 +149,7 @@ function ServerRoot({ cacheKey }: { cacheKey: string }): JSX.Element { return root } -const StrictModeIfEnabled = process.env.__NEXT_STRICT_MODE +const StrictModeIfEnabled = process.env.__NEXT_STRICT_MODE_APP ? React.StrictMode : React.Fragment diff --git a/packages/next/server/config-shared.ts b/packages/next/server/config-shared.ts index 8b46186c766d..957ab2b69119 100644 --- a/packages/next/server/config-shared.ts +++ b/packages/next/server/config-shared.ts @@ -391,7 +391,7 @@ export interface NextConfig extends Record { * * @see [React Strict Mode](https://nextjs.org/docs/api-reference/next.config.js/react-strict-mode) */ - reactStrictMode?: boolean + reactStrictMode?: boolean | null /** * Add public (in browser) runtime configuration to your app @@ -545,7 +545,7 @@ export const defaultConfig: NextConfig = { excludeDefaultMomentLocales: true, serverRuntimeConfig: {}, publicRuntimeConfig: {}, - reactStrictMode: false, + reactStrictMode: null, httpAgentOptions: { keepAlive: true, },