Skip to content

Commit 845d7d9

Browse files
committed
fixup! Turbopack: support config.turbopack and deprecate config.experimental.turbopack.
1 parent 857e4b6 commit 845d7d9

File tree

20 files changed

+103
-133
lines changed

20 files changed

+103
-133
lines changed

bench/heavy-npm-deps/next.config.mjs

+1-3
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,7 @@ const nextConfig = {
77
ignoreBuildErrors: true,
88
},
99
experimental: {
10-
turbo: {
11-
unstablePersistentCaching: process.env.TURBO_CACHE === '1',
12-
},
10+
turbopackPersistentCaching: process.env.TURBO_CACHE === '1',
1311
},
1412
}
1513

examples/with-react-native-web/next.config.js

+16-18
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,22 @@
11
/** @type {import('next').NextConfig} */
22
module.exports = {
3-
experimental: {
4-
turbo: {
5-
resolveAlias: {
6-
"react-native": "react-native-web",
7-
},
8-
resolveExtensions: [
9-
".web.js",
10-
".web.jsx",
11-
".web.ts",
12-
".web.tsx",
13-
".mdx",
14-
".tsx",
15-
".ts",
16-
".jsx",
17-
".js",
18-
".mjs",
19-
".json",
20-
],
3+
turbopack: {
4+
resolveAlias: {
5+
"react-native": "react-native-web",
216
},
7+
resolveExtensions: [
8+
".web.js",
9+
".web.jsx",
10+
".web.ts",
11+
".web.tsx",
12+
".mdx",
13+
".tsx",
14+
".ts",
15+
".jsx",
16+
".js",
17+
".mjs",
18+
".json",
19+
],
2220
},
2321
webpack: (config) => {
2422
config.resolve.alias = {

examples/with-turbopack-loaders/next.config.js

+9-11
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
module.exports = {
2-
experimental: {
3-
turbo: {
4-
rules: {
5-
"*.react.svg": {
6-
loaders: ["@svgr/webpack"],
7-
as: "*.js",
8-
},
9-
"*.styl": {
10-
loaders: ["stylus-loader"],
11-
as: "*.css",
12-
},
2+
turbopack: {
3+
rules: {
4+
"*.react.svg": {
5+
loaders: ["@svgr/webpack"],
6+
as: "*.js",
7+
},
8+
"*.styl": {
9+
loaders: ["stylus-loader"],
10+
as: "*.css",
1311
},
1412
},
1513
},

packages/next/src/build/swc/index.ts

+8-8
Original file line numberDiff line numberDiff line change
@@ -786,24 +786,24 @@ function bindingToApi(
786786
if (reactCompilerOptions) {
787787
const ruleKeys = ['*.ts', '*.js', '*.jsx', '*.tsx']
788788
if (
789-
Object.keys(nextConfig?.experimental?.turbo?.rules ?? []).some((key) =>
789+
Object.keys(nextConfig?.turbopack?.rules ?? []).some((key) =>
790790
ruleKeys.includes(key)
791791
)
792792
) {
793793
Log.warn(
794-
`The React Compiler cannot be enabled automatically because 'experimental.turbo' contains a rule for '*.ts', '*.js', '*.jsx', and '*.tsx'. Remove this rule, or add 'babel-loader' and 'babel-plugin-react-compiler' to the Turbopack configuration manually.`
794+
`The React Compiler cannot be enabled automatically because 'turbopack.rules' contains a rule for '*.ts', '*.js', '*.jsx', and '*.tsx'. Remove this rule, or add 'babel-loader' and 'babel-plugin-react-compiler' to the Turbopack configuration manually.`
795795
)
796796
} else {
797-
if (!nextConfig.experimental.turbo) {
798-
nextConfig.experimental.turbo = {}
797+
if (!nextConfig.turbopack) {
798+
nextConfig.turbopack = {}
799799
}
800800

801-
if (!nextConfig.experimental.turbo.rules) {
802-
nextConfig.experimental.turbo.rules = {}
801+
if (!nextConfig.turbopack.rules) {
802+
nextConfig.turbopack.rules = {}
803803
}
804804

805805
for (const key of ['*.ts', '*.js', '*.jsx', '*.tsx']) {
806-
nextConfig.experimental.turbo.rules[key] = {
806+
nextConfig.turbopack.rules[key] = {
807807
browser: {
808808
foreign: false,
809809
loaders: [
@@ -840,7 +840,7 @@ function bindingToApi(
840840

841841
if (nextConfigSerializable.experimental?.turbo?.rules) {
842842
ensureLoadersHaveSerializableOptions(
843-
nextConfigSerializable.experimental.turbo?.rules
843+
nextConfigSerializable.turbopack?.rules
844844
)
845845
}
846846

packages/next/src/build/turbopack-build/impl.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,7 @@ export async function turbopackBuild(): Promise<{
5454
const project = await bindings.turbo.createProject(
5555
{
5656
projectPath: dir,
57-
rootPath:
58-
config.experimental?.turbo?.root || config.outputFileTracingRoot || dir,
57+
rootPath: config.turbopack?.root || config.outputFileTracingRoot || dir,
5958
distDir,
6059
nextConfig: config,
6160
jsConfig: await getTurbopackJsConfig(dir, config),
@@ -83,7 +82,7 @@ export async function turbopackBuild(): Promise<{
8382
},
8483
{
8584
persistentCaching,
86-
memoryLimit: config.experimental.turbo?.memoryLimit,
85+
memoryLimit: config.turbopack?.memoryLimit,
8786
dependencyTracking: persistentCaching,
8887
}
8988
)

packages/next/src/lib/turbopack-warning.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ export async function validateTurboNextConfig({
144144
if (key.startsWith('webpack') && rawNextConfig.webpack) {
145145
hasWebpackConfig = true
146146
}
147-
if (key.startsWith('experimental.turbo')) {
147+
if (key.startsWith('turbopack')) {
148148
hasTurboConfig = true
149149
}
150150

packages/next/src/server/config.test.ts

+2-4
Original file line numberDiff line numberDiff line change
@@ -127,14 +127,12 @@ describe('loadConfig', () => {
127127
loadConfig('', __dirname, {
128128
customConfig: {
129129
experimental: {
130-
turbo: {
131-
unstablePersistentCaching: true,
132-
},
130+
turbopackPersistentCaching: true,
133131
},
134132
},
135133
})
136134
).rejects.toThrow(
137-
/The experimental feature "experimental.turbo.unstablePersistentCaching" can only be enabled when using the latest canary version of Next.js./
135+
/The experimental feature "experimental.turbopackPersistentCaching" can only be enabled when using the latest canary version of Next.js./
138136
)
139137
})
140138
})

packages/next/src/server/config.ts

+3-6
Original file line numberDiff line numberDiff line change
@@ -655,14 +655,11 @@ function assignDefaults(
655655
}
656656
}
657657

658-
if (
659-
result?.experimental?.turbo?.root &&
660-
!isAbsolute(result.experimental.turbo.root)
661-
) {
662-
result.experimental.turbo.root = resolve(result.experimental.turbo.root)
658+
if (result?.turbopack?.root && !isAbsolute(result.turbopack.root)) {
659+
result.turbopack.root = resolve(result.turbopack.root)
663660
if (!silent) {
664661
Log.warn(
665-
`experimental.turbo.root should be absolute, using: ${result.experimental.turbo.root}`
662+
`turbopack.root should be absolute, using: ${result.turbopack.root}`
666663
)
667664
}
668665
}

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ export async function createHotReloaderTurbopack(
209209
{
210210
projectPath: projectPath,
211211
rootPath:
212-
opts.nextConfig.experimental.turbo?.root ||
212+
opts.nextConfig.turbopack?.root ||
213213
opts.nextConfig.outputFileTracingRoot ||
214214
projectPath,
215215
distDir,
@@ -240,7 +240,7 @@ export async function createHotReloaderTurbopack(
240240
},
241241
{
242242
persistentCaching: isPersistentCachingEnabled(opts.nextConfig),
243-
memoryLimit: opts.nextConfig.experimental.turbo?.memoryLimit,
243+
memoryLimit: opts.nextConfig.turbopack?.memoryLimit,
244244
}
245245
)
246246
setBundlerFindSourceMapImplementation(

packages/next/src/shared/lib/turbopack/utils.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -262,5 +262,5 @@ export function renderStyledStringToErrorAnsi(string: StyledString): string {
262262
export function isPersistentCachingEnabled(
263263
config: NextConfigComplete
264264
): boolean {
265-
return config.experimental.turbo?.unstablePersistentCaching || false
265+
return config.experimental?.turbopackPersistentCaching || false
266266
}

test/e2e/app-dir/react-owner-stacks-svgr/next.config.js

+5-7
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,11 @@
22
* @type {import('next').NextConfig}
33
*/
44
const nextConfig = {
5-
experimental: {
6-
turbo: {
7-
rules: {
8-
'*.svg': {
9-
loaders: ['@svgr/webpack'],
10-
as: '*.js',
11-
},
5+
turbopack: {
6+
rules: {
7+
'*.svg': {
8+
loaders: ['@svgr/webpack'],
9+
as: '*.js',
1210
},
1311
},
1412
},

test/e2e/app-dir/resolve-extensions/next.config.js

+2-4
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,8 @@ const extensions = ['', '.png', '.tsx', '.ts', '.jsx', '.js', '.json']
44
* @type {import('next').NextConfig}
55
*/
66
const nextConfig = {
7-
experimental: {
8-
turbo: {
9-
resolveExtensions: [...extensions],
10-
},
7+
turbopack: {
8+
resolveExtensions: [...extensions],
119
},
1210
webpack(config) {
1311
config.resolve.extensions = [...extensions]

test/e2e/app-dir/scss/npm-import-tilde/npm-import-tilde.test.ts

+4-6
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,10 @@
33
import { nextTestSetup } from 'e2e-utils'
44

55
const nextConfig = {
6-
experimental: {
7-
turbo: {
8-
resolveAlias: {
9-
'/*': './*',
10-
'~*': '*',
11-
},
6+
turbopack: {
7+
resolveAlias: {
8+
'/*': './*',
9+
'~*': '*',
1210
},
1311
},
1412
}

test/e2e/app-dir/turbopack-loader-resource-query/next.config.js

+5-7
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
/** @type {import('next').NextConfig} */
22
const nextConfig = {
3-
experimental: {
4-
turbo: {
5-
rules: {
6-
'*.mdx': {
7-
loaders: ['test-loader.js'],
8-
as: '*.js',
9-
},
3+
turbopack: {
4+
rules: {
5+
'*.mdx': {
6+
loaders: ['test-loader.js'],
7+
as: '*.js',
108
},
119
},
1210
},

test/e2e/app-dir/webpack-loader-conditions/next.config.js

+21-23
Original file line numberDiff line numberDiff line change
@@ -2,38 +2,36 @@
22
* @type {import('next').NextConfig}
33
*/
44
const nextConfig = {
5-
experimental: {
6-
turbo: {
7-
rules: {
8-
'*.test-file.js': {
9-
browser: {
10-
foreign: {
11-
loaders: [
12-
{
13-
loader: require.resolve('./test-file-loader.js'),
14-
options: { browser: true, foreign: true },
15-
},
16-
],
17-
},
18-
default: {
19-
loaders: [
20-
{
21-
loader: require.resolve('./test-file-loader.js'),
22-
options: { browser: true },
23-
},
24-
],
25-
},
5+
turbopack: {
6+
rules: {
7+
'*.test-file.js': {
8+
browser: {
9+
foreign: {
10+
loaders: [
11+
{
12+
loader: require.resolve('./test-file-loader.js'),
13+
options: { browser: true, foreign: true },
14+
},
15+
],
2616
},
27-
foreign: false,
2817
default: {
2918
loaders: [
3019
{
3120
loader: require.resolve('./test-file-loader.js'),
32-
options: { default: true },
21+
options: { browser: true },
3322
},
3423
],
3524
},
3625
},
26+
foreign: false,
27+
default: {
28+
loaders: [
29+
{
30+
loader: require.resolve('./test-file-loader.js'),
31+
options: { default: true },
32+
},
33+
],
34+
},
3735
},
3836
},
3937
},

test/e2e/app-dir/webpack-loader-ts-transform/next.config.js

+3-5
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@
22
* @type {import('next').NextConfig}
33
*/
44
const nextConfig = {
5-
experimental: {
6-
turbo: {
7-
rules: {
8-
'*.test-file.ts': [require.resolve('./test-file-loader.js')],
9-
},
5+
turbopack: {
6+
rules: {
7+
'*.test-file.ts': [require.resolve('./test-file-loader.js')],
108
},
119
},
1210
}

test/e2e/esm-externals/next.config.js

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
module.exports = {
2-
experimental: {
3-
turbo: {
4-
resolveAlias: {
5-
'preact/compat': 'react',
6-
},
2+
turbopack: {
3+
resolveAlias: {
4+
'preact/compat': 'react',
75
},
86
},
97
serverExternalPackages: [

test/e2e/persistent-caching/next.config.js

+10-10
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,19 @@
22
* @type {import('next').NextConfig}
33
*/
44
const nextConfig = {
5-
experimental: {
6-
turbo: {
7-
unstablePersistentCaching: true,
8-
rules: {
9-
'app/page.tsx': {
10-
loaders: ['./my-loader.js'],
11-
},
12-
'pages/pages.tsx': {
13-
loaders: ['./my-loader.js'],
14-
},
5+
turbopack: {
6+
rules: {
7+
'app/page.tsx': {
8+
loaders: ['./my-loader.js'],
9+
},
10+
'pages/pages.tsx': {
11+
loaders: ['./my-loader.js'],
1512
},
1613
},
1714
},
15+
experimental: {
16+
turbopackPersistentCaching: true,
17+
},
1818
webpack(config) {
1919
config.module.rules.push({
2020
test: /app\/page\.tsx|pages\/pages.tsx/,

0 commit comments

Comments
 (0)