feat: Enable React Compiler for automatic memoization

- Install babel-plugin-react-compiler@1.0.0
- Add reactCompiler: true to next.config.mjs
- React 19 compiler will auto-optimize useMemo/useCallback
This commit is contained in:
2026-01-19 22:47:01 +01:00
parent 096daffb3e
commit 004698b604
3 changed files with 19 additions and 5 deletions

View File

@@ -5,6 +5,8 @@ const nextConfig = {
output: 'standalone', output: 'standalone',
// Enable source maps for Sentry stack traces in production // Enable source maps for Sentry stack traces in production
productionBrowserSourceMaps: !!process.env.GLITCHTIP_DSN, productionBrowserSourceMaps: !!process.env.GLITCHTIP_DSN,
// React Compiler for automatic memoization (React 19+)
reactCompiler: true,
experimental: { experimental: {
serverActions: { serverActions: {
bodySizeLimit: '10mb', bodySizeLimit: '10mb',

View File

@@ -52,6 +52,7 @@
"@types/react-dom": "^19.0.0", "@types/react-dom": "^19.0.0",
"@types/uuid": "^10.0.0", "@types/uuid": "^10.0.0",
"@vitejs/plugin-react": "^5.1.2", "@vitejs/plugin-react": "^5.1.2",
"babel-plugin-react-compiler": "^1.0.0",
"eslint": "^8", "eslint": "^8",
"eslint-config-next": "16.1.0", "eslint-config-next": "16.1.0",
"eslint-plugin-security": "^2.1.1", "eslint-plugin-security": "^2.1.1",

21
pnpm-lock.yaml generated
View File

@@ -19,7 +19,7 @@ importers:
version: 1.11.0 version: 1.11.0
'@sentry/nextjs': '@sentry/nextjs':
specifier: ^10.34.0 specifier: ^10.34.0
version: 10.34.0(@opentelemetry/context-async-hooks@2.4.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.4.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.4.0(@opentelemetry/api@1.9.0))(next@16.1.0(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(webpack@5.104.1) version: 10.34.0(@opentelemetry/context-async-hooks@2.4.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.4.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.4.0(@opentelemetry/api@1.9.0))(next@16.1.0(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(webpack@5.104.1)
'@supabase/ssr': '@supabase/ssr':
specifier: ^0.5.2 specifier: ^0.5.2
version: 0.5.2(@supabase/supabase-js@2.88.0) version: 0.5.2(@supabase/supabase-js@2.88.0)
@@ -64,7 +64,7 @@ importers:
version: 5.1.6 version: 5.1.6
next: next:
specifier: 16.1.0 specifier: 16.1.0
version: 16.1.0(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) version: 16.1.0(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
openai: openai:
specifier: ^6.15.0 specifier: ^6.15.0
version: 6.15.0(ws@8.18.3)(zod@3.25.76) version: 6.15.0(ws@8.18.3)(zod@3.25.76)
@@ -123,6 +123,9 @@ importers:
'@vitejs/plugin-react': '@vitejs/plugin-react':
specifier: ^5.1.2 specifier: ^5.1.2
version: 5.1.2(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0)) version: 5.1.2(vite@7.3.0(@types/node@20.19.27)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0))
babel-plugin-react-compiler:
specifier: ^1.0.0
version: 1.0.0
eslint: eslint:
specifier: ^8 specifier: ^8
version: 8.57.1 version: 8.57.1
@@ -1935,6 +1938,9 @@ packages:
react-native-b4a: react-native-b4a:
optional: true optional: true
babel-plugin-react-compiler@1.0.0:
resolution: {integrity: sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==}
balanced-match@1.0.2: balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@@ -5192,7 +5198,7 @@ snapshots:
'@sentry/core@10.34.0': {} '@sentry/core@10.34.0': {}
'@sentry/nextjs@10.34.0(@opentelemetry/context-async-hooks@2.4.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.4.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.4.0(@opentelemetry/api@1.9.0))(next@16.1.0(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(webpack@5.104.1)': '@sentry/nextjs@10.34.0(@opentelemetry/context-async-hooks@2.4.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.4.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.4.0(@opentelemetry/api@1.9.0))(next@16.1.0(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(webpack@5.104.1)':
dependencies: dependencies:
'@opentelemetry/api': 1.9.0 '@opentelemetry/api': 1.9.0
'@opentelemetry/semantic-conventions': 1.39.0 '@opentelemetry/semantic-conventions': 1.39.0
@@ -5205,7 +5211,7 @@ snapshots:
'@sentry/react': 10.34.0(react@19.2.3) '@sentry/react': 10.34.0(react@19.2.3)
'@sentry/vercel-edge': 10.34.0 '@sentry/vercel-edge': 10.34.0
'@sentry/webpack-plugin': 4.6.2(webpack@5.104.1) '@sentry/webpack-plugin': 4.6.2(webpack@5.104.1)
next: 16.1.0(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) next: 16.1.0(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
rollup: 4.53.5 rollup: 4.53.5
stacktrace-parser: 0.1.11 stacktrace-parser: 0.1.11
transitivePeerDependencies: transitivePeerDependencies:
@@ -6043,6 +6049,10 @@ snapshots:
b4a@1.7.3: {} b4a@1.7.3: {}
babel-plugin-react-compiler@1.0.0:
dependencies:
'@babel/types': 7.28.5
balanced-match@1.0.2: {} balanced-match@1.0.2: {}
bare-events@2.8.2: {} bare-events@2.8.2: {}
@@ -7412,7 +7422,7 @@ snapshots:
neo-async@2.6.2: {} neo-async@2.6.2: {}
next@16.1.0(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): next@16.1.0(@babel/core@7.28.5)(@opentelemetry/api@1.9.0)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
dependencies: dependencies:
'@next/env': 16.1.0 '@next/env': 16.1.0
'@swc/helpers': 0.5.15 '@swc/helpers': 0.5.15
@@ -7433,6 +7443,7 @@ snapshots:
'@next/swc-win32-x64-msvc': 16.1.0 '@next/swc-win32-x64-msvc': 16.1.0
'@opentelemetry/api': 1.9.0 '@opentelemetry/api': 1.9.0
'@playwright/test': 1.57.0 '@playwright/test': 1.57.0
babel-plugin-react-compiler: 1.0.0
sharp: 0.34.5 sharp: 0.34.5
transitivePeerDependencies: transitivePeerDependencies:
- '@babel/core' - '@babel/core'