Skip to content

Commit 280ed87

Browse files
committed
fix: ensure require hooks resolve from cwd
1 parent 4f51249 commit 280ed87

File tree

2 files changed

+43
-30
lines changed

2 files changed

+43
-30
lines changed

packages/runtime/src/templates/getHandler.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ const makeHandler = ({ conf, app, pageRoot, NextServer, staticManifest = [], mod
5757
require.resolve('./pages.js')
5858
} catch {}
5959

60+
// Next 13.4 conditionally uses different React versions and we need to make sure we use the same one
6061
overrideRequireHooks(conf)
6162
const NetlifyNextServer: NetlifyNextServerType = getNetlifyNextServer(NextServer)
6263
applyRequireHooks()

packages/runtime/src/templates/requireHooks.ts

Lines changed: 42 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
/* eslint-disable n/no-extraneous-require, no-underscore-dangle, @typescript-eslint/no-explicit-any */
2+
3+
// This is a modified version of the require hooks from Next.js
4+
// https://github.com/vercel/next.js/blob/b04c70573ac199a9bb3ea42201e0865e610d5b67/packages/next/src/server/require-hook.ts
5+
26
import mod from 'module'
37

48
import type { NextConfig } from '../helpers/config'
@@ -7,41 +11,49 @@ const resolveFilename = (mod as any)._resolveFilename
711
const requireHooks = new Map<string, Map<string, string>>()
812

913
export const overrideRequireHooks = (config: NextConfig) => {
14+
// we may have changed the working directory in the handler
15+
const opts = {
16+
paths: [process.cwd()],
17+
}
18+
1019
requireHooks.set(
1120
'default',
1221
new Map([
13-
['react', require.resolve(`react`)],
14-
['react/jsx-runtime', require.resolve(`react/jsx-runtime`)],
22+
['react', require.resolve(`react`, opts)],
23+
['react/jsx-runtime', require.resolve(`react/jsx-runtime`, opts)],
1524
]),
1625
)
1726

1827
if (config.experimental.appDir) {
1928
requireHooks.set(
2029
'next',
2130
new Map([
22-
['react', require.resolve(`next/dist/compiled/react`)],
23-
['react/jsx-runtime', require.resolve(`next/dist/compiled/react/jsx-runtime`)],
24-
['react/jsx-dev-runtime', require.resolve(`next/dist/compiled/react/jsx-dev-runtime`)],
25-
['react-dom', require.resolve(`next/dist/compiled/react-dom/server-rendering-stub`)],
26-
['react-dom/client', require.resolve(`next/dist/compiled/react-dom/client`)],
27-
['react-dom/server', require.resolve(`next/dist/compiled/react-dom/server`)],
28-
['react-dom/server.browser', require.resolve(`next/dist/compiled/react-dom/server.browser`)],
29-
['react-dom/server.edge', require.resolve(`next/dist/compiled/react-dom/server.edge`)],
30-
['react-server-dom-webpack/client', require.resolve(`next/dist/compiled/react-server-dom-webpack/client`)],
31+
['react', require.resolve(`next/dist/compiled/react`, opts)],
32+
['react/jsx-runtime', require.resolve(`next/dist/compiled/react/jsx-runtime`, opts)],
33+
['react/jsx-dev-runtime', require.resolve(`next/dist/compiled/react/jsx-dev-runtime`, opts)],
34+
['react-dom', require.resolve(`next/dist/compiled/react-dom/server-rendering-stub`, opts)],
35+
['react-dom/client', require.resolve(`next/dist/compiled/react-dom/client`, opts)],
36+
['react-dom/server', require.resolve(`next/dist/compiled/react-dom/server`, opts)],
37+
['react-dom/server.browser', require.resolve(`next/dist/compiled/react-dom/server.browser`, opts)],
38+
['react-dom/server.edge', require.resolve(`next/dist/compiled/react-dom/server.edge`, opts)],
39+
[
40+
'react-server-dom-webpack/client',
41+
require.resolve(`next/dist/compiled/react-server-dom-webpack/client`, opts),
42+
],
3143
[
3244
'react-server-dom-webpack/client.edge',
33-
require.resolve(`next/dist/compiled/react-server-dom-webpack/client.edge`),
45+
require.resolve(`next/dist/compiled/react-server-dom-webpack/client.edge`, opts),
3446
],
3547
[
3648
'react-server-dom-webpack/server.edge',
37-
require.resolve(`next/dist/compiled/react-server-dom-webpack/server.edge`),
49+
require.resolve(`next/dist/compiled/react-server-dom-webpack/server.edge`, opts),
3850
],
3951
[
4052
'react-server-dom-webpack/server.node',
41-
require.resolve(`next/dist/compiled/react-server-dom-webpack/server.node`),
53+
require.resolve(`next/dist/compiled/react-server-dom-webpack/server.node`, opts),
4254
],
43-
['styled-jsx', require.resolve('styled-jsx')],
44-
['styled-jsx/style', require.resolve('styled-jsx/style')],
55+
['styled-jsx', require.resolve('styled-jsx', opts)],
56+
['styled-jsx/style', require.resolve('styled-jsx/style', opts)],
4557
]),
4658
)
4759
}
@@ -50,32 +62,32 @@ export const overrideRequireHooks = (config: NextConfig) => {
5062
requireHooks.set(
5163
'experimental',
5264
new Map([
53-
['react', require.resolve(`next/dist/compiled/react-experimental`)],
54-
['react/jsx-runtime', require.resolve(`next/dist/compiled/react-experimental/jsx-runtime`)],
55-
['react/jsx-dev-runtime', require.resolve(`next/dist/compiled/react-experimental/jsx-dev-runtime`)],
56-
['react-dom', require.resolve(`next/dist/compiled/react-dom-experimental/server-rendering-stub`)],
57-
['react-dom/client', require.resolve(`next/dist/compiled/react-dom-experimental/client`)],
58-
['react-dom/server', require.resolve(`next/dist/compiled/react-dom-experimental/server`)],
59-
['react-dom/server.browser', require.resolve(`next/dist/compiled/react-dom-experimental/server.browser`)],
60-
['react-dom/server.edge', require.resolve(`next/dist/compiled/react-dom-experimental/server.edge`)],
65+
['react', require.resolve(`next/dist/compiled/react-experimental`, opts)],
66+
['react/jsx-runtime', require.resolve(`next/dist/compiled/react-experimental/jsx-runtime`, opts)],
67+
['react/jsx-dev-runtime', require.resolve(`next/dist/compiled/react-experimental/jsx-dev-runtime`, opts)],
68+
['react-dom', require.resolve(`next/dist/compiled/react-dom-experimental/server-rendering-stub`, opts)],
69+
['react-dom/client', require.resolve(`next/dist/compiled/react-dom-experimental/client`, opts)],
70+
['react-dom/server', require.resolve(`next/dist/compiled/react-dom-experimental/server`, opts)],
71+
['react-dom/server.browser', require.resolve(`next/dist/compiled/react-dom-experimental/server.browser`, opts)],
72+
['react-dom/server.edge', require.resolve(`next/dist/compiled/react-dom-experimental/server.edge`, opts)],
6173
[
6274
'react-server-dom-webpack/client',
63-
require.resolve(`next/dist/compiled/react-server-dom-webpack-experimental/client`),
75+
require.resolve(`next/dist/compiled/react-server-dom-webpack-experimental/client`, opts),
6476
],
6577
[
6678
'react-server-dom-webpack/client.edge',
67-
require.resolve(`next/dist/compiled/react-server-dom-webpack-experimental/client.edge`),
79+
require.resolve(`next/dist/compiled/react-server-dom-webpack-experimental/client.edge`, opts),
6880
],
6981
[
7082
'react-server-dom-webpack/server.edge',
71-
require.resolve(`next/dist/compiled/react-server-dom-webpack-experimental/server.edge`),
83+
require.resolve(`next/dist/compiled/react-server-dom-webpack-experimental/server.edge`, opts),
7284
],
7385
[
7486
'react-server-dom-webpack/server.node',
75-
require.resolve(`next/dist/compiled/react-server-dom-webpack-experimental/server.node`),
87+
require.resolve(`next/dist/compiled/react-server-dom-webpack-experimental/server.node`, opts),
7688
],
77-
['styled-jsx', require.resolve('styled-jsx')],
78-
['styled-jsx/style', require.resolve('styled-jsx/style')],
89+
['styled-jsx', require.resolve('styled-jsx', opts)],
90+
['styled-jsx/style', require.resolve('styled-jsx/style', opts)],
7991
]),
8092
)
8193
}

0 commit comments

Comments
 (0)