diff --git a/packages/next/build/webpack-config.ts b/packages/next/build/webpack-config.ts index a8d9d5881654..106c972521cd 100644 --- a/packages/next/build/webpack-config.ts +++ b/packages/next/build/webpack-config.ts @@ -364,6 +364,14 @@ export default async function getBaseWebpackConfig( '`experimental.serverComponents` requires React 18 to be installed.' ) } + if ( + config.experimental.serverComponents && + !config.experimental.concurrentFeatures + ) { + throw new Error( + '`experimental.serverComponents` requires `experimental.concurrentFeatures` to be enabled.' + ) + } const targetWeb = isEdgeRuntime || !isServer const hasConcurrentFeatures = @@ -1756,6 +1764,17 @@ export default async function getBaseWebpackConfig( defaultLoaders, totalPages, webpack, + ...(hasConcurrentFeatures + ? { + // When concurrent features are enabled, there are both runtimes enabled + // as the server compiler. So we change the options here to make sure + // users can distinguish between all compilers. + // This can change in the future. + isServer: !isEdgeRuntime && isServer, + isEdgeServer: isEdgeRuntime && isServer, + isClient: !isServer, + } + : null), }) if (!webpackConfig) {