Skip to content

Commit 11dd1de

Browse files
authored
Remove unnecessary experimental flag (vercel#40766)
`config.experimental.serverComponents` is currently required to be enabled or disabled together with `config.experimental.appDir` (which means `serverComponents === appDir` otherwise it will throw) so there is no reason to keep both of them. This PR removes `serverComponents` from Next.js and only rely on `appDir` instead. ## Bug - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Errors have a helpful link attached, see `contributing.md` ## Feature - [ ] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR. - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Documentation added - [ ] Telemetry added. In case of a feature if it's used or not. - [ ] Errors have a helpful link attached, see `contributing.md` ## Documentation / Examples - [ ] Make sure the linting passes by running `pnpm lint` - [ ] The "examples guidelines" are followed from [our contributing doc](https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md)
1 parent 6d4f263 commit 11dd1de

File tree

21 files changed

+17
-51
lines changed

21 files changed

+17
-51
lines changed

packages/next/build/index.ts

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -270,11 +270,7 @@ export default async function build(
270270
setGlobal('phase', PHASE_PRODUCTION_BUILD)
271271
setGlobal('distDir', distDir)
272272

273-
// We enable concurrent features (Fizz-related rendering architecture) when
274-
// using React 18 or experimental.
275273
const hasReactRoot = !!process.env.__NEXT_REACT_ROOT
276-
const hasServerComponents =
277-
hasReactRoot && !!config.experimental.serverComponents
278274

279275
const { target } = config
280276
const buildId: string = await nextBuildSpan
@@ -814,7 +810,7 @@ export default async function build(
814810
BUILD_MANIFEST,
815811
PRERENDER_MANIFEST,
816812
path.join(SERVER_DIRECTORY, MIDDLEWARE_MANIFEST),
817-
...(hasServerComponents
813+
...(appDir
818814
? [
819815
path.join(SERVER_DIRECTORY, FLIGHT_MANIFEST + '.js'),
820816
path.join(SERVER_DIRECTORY, FLIGHT_MANIFEST + '.json'),
@@ -912,10 +908,8 @@ export default async function build(
912908
let edgeServerResult: SingleCompilerResult | null = null
913909

914910
if (isLikeServerless) {
915-
if (config.experimental.serverComponents) {
916-
throw new Error(
917-
'Server Components are not supported in serverless mode.'
918-
)
911+
if (appDir) {
912+
throw new Error('`appDir` is not supported in serverless mode.')
919913
}
920914

921915
// Build client first
@@ -1357,7 +1351,7 @@ export default async function build(
13571351
pageRuntime,
13581352
edgeInfo,
13591353
pageType,
1360-
hasServerComponents,
1354+
hasServerComponents: !!appDir,
13611355
})
13621356
}
13631357
)

packages/next/build/swc/options.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ function getBaseSWCOptions({
118118
modularizeImports: nextConfig?.experimental?.modularizeImports,
119119
relay: nextConfig?.compiler?.relay,
120120
emotion: getEmotionOptions(nextConfig, development),
121-
serverComponents: nextConfig?.experimental?.serverComponents
121+
serverComponents: nextConfig?.experimental?.appDir
122122
? {
123123
isServer: !!isServerLayer,
124124
}

packages/next/build/webpack-config.ts

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -544,22 +544,16 @@ export default async function getBaseWebpackConfig(
544544
'`experimental.runtime` requires React 18 to be installed.'
545545
)
546546
}
547-
if (config.experimental.serverComponents) {
547+
if (config.experimental.appDir) {
548548
throw new Error(
549-
'`experimental.serverComponents` requires React 18 to be installed.'
549+
'`experimental.appDir` requires React 18 to be installed.'
550550
)
551551
}
552552
}
553-
if (!config.experimental.appDir && config.experimental.serverComponents) {
554-
throw new Error(
555-
'`experimental.serverComponents` requires experimental.appDir to be enabled.'
556-
)
557-
}
558553
}
559554

560555
const hasConcurrentFeatures = hasReactRoot
561-
const hasServerComponents =
562-
hasConcurrentFeatures && !!config.experimental.serverComponents
556+
const hasServerComponents = !!config.experimental.appDir
563557
const disableOptimizedLoading = hasConcurrentFeatures
564558
? true
565559
: config.experimental.disableOptimizedLoading
@@ -1812,7 +1806,7 @@ export default async function getBaseWebpackConfig(
18121806
} = require('./webpack/plugins/nextjs-require-cache-hot-reloader')
18131807
const devPlugins = [
18141808
new NextJsRequireCacheHotReloader({
1815-
hasServerComponents: config.experimental.serverComponents,
1809+
hasServerComponents,
18161810
}),
18171811
]
18181812

@@ -1881,11 +1875,9 @@ export default async function getBaseWebpackConfig(
18811875
},
18821876
}),
18831877
!!config.experimental.appDir &&
1884-
hasServerComponents &&
18851878
isClient &&
18861879
new AppBuildManifestPlugin({ dev }),
18871880
hasServerComponents &&
1888-
!!config.experimental.appDir &&
18891881
(isClient
18901882
? new FlightManifestPlugin({
18911883
dev,

packages/next/export/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,7 @@ export default async function exportApp(
388388
nextScriptWorkers: nextConfig.experimental.nextScriptWorkers,
389389
optimizeFonts: nextConfig.optimizeFonts as FontConfig,
390390
largePageDataBytes: nextConfig.experimental.largePageDataBytes,
391-
serverComponents: nextConfig.experimental.serverComponents,
391+
serverComponents: !!nextConfig.experimental.appDir,
392392
}
393393

394394
const { serverRuntimeConfig, publicRuntimeConfig } = nextConfig
@@ -613,7 +613,7 @@ export default async function exportApp(
613613
nextConfig.experimental.disableOptimizedLoading,
614614
parentSpanId: pageExportSpan.id,
615615
httpAgentOptions: nextConfig.httpAgentOptions,
616-
serverComponents: nextConfig.experimental.serverComponents,
616+
serverComponents: !!nextConfig.experimental.appDir,
617617
appPaths: options.appPaths || [],
618618
})
619619

packages/next/server/base-server.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ export default abstract class Server<ServerOptions extends Options = Options> {
363363
this.buildId = this.getBuildId()
364364
this.minimalMode = minimalMode || !!process.env.NEXT_PRIVATE_MINIMAL_MODE
365365

366-
const serverComponents = this.nextConfig.experimental.serverComponents
366+
const serverComponents = !!this.nextConfig.experimental.appDir
367367
this.serverComponentManifest = serverComponents
368368
? this.getServerComponentManifest()
369369
: undefined

packages/next/server/config-schema.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -342,9 +342,6 @@ const configSchema = {
342342
scrollRestoration: {
343343
type: 'boolean',
344344
},
345-
serverComponents: {
346-
type: 'boolean',
347-
},
348345
sharedPool: {
349346
type: 'boolean',
350347
},

packages/next/server/config-shared.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,6 @@ export interface ExperimentalConfig {
114114
esmExternals?: boolean | 'loose'
115115
isrMemoryCacheSize?: number
116116
runtime?: Exclude<ServerRuntime, undefined>
117-
serverComponents?: boolean
118117
fullySpecified?: boolean
119118
urlImports?: NonNullable<webpack.Configuration['experiments']>['buildHttp']
120119
outputFileTracingRoot?: string
@@ -570,7 +569,6 @@ export const defaultConfig: NextConfig = {
570569
// default to 50MB limit
571570
isrMemoryCacheSize: 50 * 1024 * 1024,
572571
incrementalCacheHandlerPath: undefined,
573-
serverComponents: false,
574572
fullySpecified: false,
575573
outputFileTracingRoot: process.env.NEXT_PRIVATE_OUTPUT_TRACE_ROOT || '',
576574
swcTraceProfiling: false,

packages/next/server/dev/hot-reloader.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,8 +217,7 @@ export default class HotReloader {
217217

218218
this.config = config
219219
this.hasReactRoot = !!process.env.__NEXT_REACT_ROOT
220-
this.hasServerComponents =
221-
this.hasReactRoot && !!config.experimental.serverComponents
220+
this.hasServerComponents = this.hasReactRoot && !!config.experimental.appDir
222221
this.previewProps = previewProps
223222
this.rewrites = rewrites
224223
this.hotReloaderSpan = trace('hot-reloader', undefined, {

packages/next/server/dev/next-dev-server.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1347,11 +1347,9 @@ export default class DevServer extends Server {
13471347
clientOnly: false,
13481348
})
13491349

1350-
const serverComponents = this.nextConfig.experimental.serverComponents
1351-
13521350
// When the new page is compiled, we need to reload the server component
13531351
// manifest.
1354-
if (serverComponents) {
1352+
if (this.nextConfig.experimental.appDir) {
13551353
this.serverComponentManifest = super.getServerComponentManifest()
13561354
this.serverCSSManifest = super.getServerCSSManifest()
13571355
}

packages/next/server/next-server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,12 +1003,12 @@ export default class NextNodeServer extends BaseServer {
10031003
}
10041004

10051005
protected getServerComponentManifest() {
1006-
if (!this.nextConfig.experimental.serverComponents) return undefined
1006+
if (!this.nextConfig.experimental.appDir) return undefined
10071007
return require(join(this.distDir, 'server', FLIGHT_MANIFEST + '.json'))
10081008
}
10091009

10101010
protected getServerCSSManifest() {
1011-
if (!this.nextConfig.experimental.serverComponents) return undefined
1011+
if (!this.nextConfig.experimental.appDir) return undefined
10121012
return require(join(
10131013
this.distDir,
10141014
'server',

0 commit comments

Comments
 (0)