Skip to content

Commit 6169e78

Browse files
authored
Fix required-server-files (#86875)
Fixes a regression in #86830 `config.distDir` was missing <img width="1622" height="475" alt="Bildschirmfoto 2025-12-05 um 17 50 43" src="https://github.com/user-attachments/assets/6460801d-949e-441b-a7d3-6fb679f22d83" />
1 parent 7c96965 commit 6169e78

File tree

4 files changed

+38
-5
lines changed

4 files changed

+38
-5
lines changed

packages/next/src/build/index.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1931,17 +1931,22 @@ export default async function build(
19311931

19321932
if (hasInstrumentationHook) {
19331933
serverFilesManifest.files.push(
1934-
path.join(SERVER_DIRECTORY, `${INSTRUMENTATION_HOOK_FILENAME}.js`)
1934+
path.join(
1935+
config.distDir,
1936+
SERVER_DIRECTORY,
1937+
`${INSTRUMENTATION_HOOK_FILENAME}.js`
1938+
)
19351939
)
19361940
// If there are edge routes, append the edge instrumentation hook
19371941
// Turbopack generates this chunk with a hashed name and references it in middleware-manifest.
19381942
let edgeInstrumentationHook = path.join(
1943+
config.distDir,
19391944
SERVER_DIRECTORY,
19401945
`edge-${INSTRUMENTATION_HOOK_FILENAME}.js`
19411946
)
19421947
if (
19431948
bundler !== Bundler.Turbopack &&
1944-
existsSync(path.join(distDir, edgeInstrumentationHook))
1949+
existsSync(path.join(dir, edgeInstrumentationHook))
19451950
) {
19461951
serverFilesManifest.files.push(edgeInstrumentationHook)
19471952
}

test/lib/next-modes/next-start.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ export class NextStartInstance extends NextInstance {
217217
)
218218
}
219219

220-
return new Promise<{
220+
let result = await new Promise<{
221221
exitCode: NodeJS.Signals | number | null
222222
cliOutput: string
223223
}>((resolve) => {
@@ -238,6 +238,21 @@ export class NextStartInstance extends NextInstance {
238238
})
239239
})
240240
})
241+
242+
this._buildId = (
243+
await fs
244+
.readFile(
245+
path.join(
246+
this.testDir,
247+
this.nextConfig?.distDir || '.next',
248+
'BUILD_ID'
249+
),
250+
'utf8'
251+
)
252+
.catch(() => '')
253+
).trim()
254+
255+
return result
241256
}
242257

243258
public async waitForMinPrerenderAge(minAgeMS: number): Promise<void> {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export function register() {}

test/production/standalone-mode/required-server-files/required-server-files.test.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ describe('required server files', () => {
4444
: 'middleware.js'
4545
)
4646
),
47+
'instrumentation.js': new FileRef(
48+
join(__dirname, 'instrumentation.js')
49+
),
4750
'cache-handler.js': new FileRef(join(__dirname, 'cache-handler.js')),
4851
'data.txt': new FileRef(join(__dirname, 'data.txt')),
4952
'.env': new FileRef(join(__dirname, '.env')),
@@ -84,8 +87,11 @@ describe('required server files', () => {
8487
}
8588
},
8689
},
90+
skipStart: true,
8791
})
88-
await next.stop()
92+
93+
let { exitCode } = await next.build()
94+
expect(exitCode).toBe(0)
8995

9096
requiredFilesManifest = JSON.parse(
9197
await next.readFile('.next/required-server-files.json')
@@ -241,11 +247,11 @@ describe('required server files', () => {
241247
redirect: 'manual',
242248
}
243249
)
244-
expect(dataRes.headers.get('cache-control')).toBe(cacheControl)
245250
expect((await dataRes.json()).pageProps).toEqual({
246251
__N_REDIRECT: dest,
247252
__N_REDIRECT_STATUS: 307,
248253
})
254+
expect(dataRes.headers.get('cache-control')).toBe(cacheControl)
249255
}
250256
)
251257

@@ -415,6 +421,12 @@ describe('required server files', () => {
415421
expect(typeof requiredFilesManifest.appDir).toBe('string')
416422
// not in a monorepo so relative app dir is empty string
417423
expect(requiredFilesManifest.relativeAppDir).toBe('')
424+
425+
expect(
426+
requiredFilesManifest.files.filter(
427+
(f) => !fs.pathExistsSync(join(next.testDir, 'standalone', f))
428+
)
429+
).toBeEmpty()
418430
})
419431

420432
it('should de-dupe HTML/data requests', async () => {

0 commit comments

Comments
 (0)