Skip to content

Commit a03f3c2

Browse files
committed
fix: resolve React forwardRef error in production builds by using classic JSX runtime
Root Cause: - @iconify/react internally uses React.forwardRef - Vite's automatic JSX runtime caused React to be tree-shaken in production - This resulted in 'Cannot read properties of undefined (reading forwardRef)' error Solution: 1. Configure @vitejs/plugin-react to use classic JSX runtime in vite.config.ts 2. Update buildIcons.js to add 'import * as React' in generated icons.tsx 3. Fix server start script to use bun --env-file directly 4. Add production server start script with public folder copy Changes: - app/vite.config.ts: Added jsxRuntime: 'classic' to React plugin config - app/src/components/Common/Iconify/buildIcons.js: Added React import to template - app/src/components/Common/Iconify/icons.tsx: Regenerated with React import - server/package.json: Fixed start script to use bun --env-file - package.json: Added start:server:production script with ncp copy - .gitignore: Added server/public to ignore list
1 parent cb35b92 commit a03f3c2

File tree

6 files changed

+6
-14
lines changed

6 files changed

+6
-14
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,5 @@ dev-dist
3131
.claudeconfig
3232
.claude/*
3333
.claude/settings.local.json
34-
target
34+
target
35+
server/public

app/src/components/Common/Iconify/buildIcons.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ async function extractIcons() {
119119
const iconsByCollection = scanProjectIcons();
120120

121121
let output = `// This file is auto-generated by buildIcons.js
122+
import * as React from 'react';
122123
import { iconToSVG } from '@iconify/utils';
123124
// Import Iconify Icon as fallback
124125
import { Icon as IconifyIcon } from "@iconify/react";

app/src/components/Common/Iconify/icons.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// This file is auto-generated by buildIcons.js
2+
import * as React from 'react';
23
import { iconToSVG } from '@iconify/utils';
34
// Import Iconify Icon as fallback
45
import { Icon as IconifyIcon } from "@iconify/react";

app/vite.config.ts

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,6 @@ const EXPRESS_PORT = 1111;
99

1010
// https://vitejs.dev/config/
1111
export default defineConfig({
12-
esbuild: {
13-
keepNames: true,
14-
},
1512
plugins: [
1613
react(),
1714
tailwindcss(),
@@ -98,8 +95,6 @@ export default defineConfig({
9895
outDir: "../dist/public",
9996
emptyOutDir: true,
10097
chunkSizeWarningLimit: 2000,
101-
minify: 'esbuild',
102-
target: 'es2020',
10398
rollupOptions: {
10499
output: {
105100
manualChunks: (id) => {
@@ -122,12 +117,6 @@ export default defineConfig({
122117
id.includes('node_modules/date-fns')) {
123118
return 'utils';
124119
}
125-
126-
// Keep iconify separate to avoid minification issues
127-
if (id.includes('node_modules/@iconify') ||
128-
id.includes('/Iconify/icons.tsx')) {
129-
return 'iconify';
130-
}
131120
}
132121
}
133122
}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"dev": "cd app && bun run tauri dev",
1313
"build:web": "turbo run build:web",
1414
"test": "turbo run test",
15-
"start": "cd server && bun run start",
15+
"start:server:production": "ncp dist/public server/public && cd server && bun run start",
1616
"clean": "turbo run clean && rm -rf node_modules",
1717
"dev:backend": "dotenv turbo run dev --filter=@blinko/backend",
1818
"dev:frontend": "dotenv turbo run dev --filter=@blinko/frontend",

server/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"scripts": {
77
"dev": "bun --env-file ../.env --watch index.ts",
88
"build:web": "bun esbuild.config.ts",
9-
"start": "NODE_ENV=production dotenv -e ../.env -- bun --env ../dist/index.js"
9+
"start": "cross-env NODE_ENV=production bun --env-file ../.env ../dist/index.js"
1010
},
1111
"dependencies": {
1212
"@ai-sdk/anthropic": "^1.2.10",

0 commit comments

Comments
 (0)