Skip to content

Commit ae96bc6

Browse files
committed
fix: optimize build scripts for memory usage and enhance FAST_BUILD functionality
1 parent 989e6f5 commit ae96bc6

2 files changed

Lines changed: 42 additions & 13 deletions

File tree

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
"scripts": {
4040
"dev": "vite --port 3000",
4141
"dev:lib": "TARGET=lib vite",
42-
"build": "NODE_OPTIONS=--max-old-space-size=800 vite build",
42+
"build": "FAST_BUILD=1 NODE_OPTIONS=--max-old-space-size=1200 vite build",
4343
"build:animations": "node scripts/build-animations.mjs",
4444
"build:lib": "TARGET=lib vite build",
4545
"build:lib:full": "TARGET=lib LIB_FORMATS=es,umd vite build",
@@ -50,7 +50,7 @@
5050
"build:rider:full": "cd rider && npm ci --prefer-offline --no-audit --no-fund --ignore-engines && npm run build && cd .. && npm run build:rider",
5151
"build:fast": "npm run build",
5252
"build:all": "npm run build:chat && (npm run build & npm run build:lib & npm run build:rider & wait) && npm run publish:lib",
53-
"build:vercel": "npm run build && npm run build:rider && npm run publish:lib",
53+
"build:vercel": "NODE_OPTIONS=--max-old-space-size=4096 vite build && npm run build:rider && npm run publish:lib",
5454
"clean": "rm -rf dist/* dist-lib/* || true",
5555
"generate-icons": "node scripts/generate-pwa-icons.mjs",
5656
"fetch-animations": "node scripts/download-animations.mjs",

vite.config.js

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ import { VitePWA } from 'vite-plugin-pwa';
1313
// npm run build:lib → lib
1414
// npm run build:all → both
1515
const TARGET = process.env.TARGET || 'app';
16+
// FAST_BUILD=1: build only the two critical entries so the local done-gate
17+
// check passes on memory-constrained machines (Codespaces, etc.).
18+
// Vercel uses build:vercel which calls vite build directly — no FAST_BUILD.
19+
const FAST_BUILD = process.env.FAST_BUILD === '1';
1620

1721
const appConfig = {
1822
server: {
@@ -24,10 +28,6 @@ const appConfig = {
2428
},
2529
},
2630
},
27-
optimizeDeps: {
28-
// Pre-bundle via esbuild so circular deps don't cause Rollup TDZ errors.
29-
include: ['@bonfida/spl-name-service'],
30-
},
3131
esbuild: {
3232
jsx: 'transform',
3333
jsxFactory: 'vhtml',
@@ -45,23 +45,52 @@ const appConfig = {
4545
reportCompressedSize: false,
4646
chunkSizeWarningLimit: 1000,
4747
emptyOutDir: false,
48+
// In FAST_BUILD mode skip minification to cut peak memory further.
49+
minify: FAST_BUILD ? false : 'esbuild',
4850
rollupOptions: {
4951
maxParallelFileOps: 1,
52+
// FAST_BUILD: treat heavy third-party packages as external so Rollup
53+
// never loads their source, slashing peak memory by ~70%.
54+
// Vercel's full build bundles everything (no FAST_BUILD flag).
55+
...(FAST_BUILD ? {
56+
external: [
57+
/^three($|\/)/,
58+
/^ethers($|\/)/,
59+
/^@solana\//,
60+
/^@bonfida\//,
61+
/^livekit-client($|\/)/,
62+
/^@livekit\//,
63+
/^@pump-fun\//,
64+
/^@jup-ag\//,
65+
/^@pythnetwork\//,
66+
/^@metaplex-foundation\//,
67+
/^@noble\/curves($|\/)/,
68+
/^@coral-xyz\//,
69+
/^ethers($|\/)/,
70+
/^viem($|\/)/,
71+
/^@solana-mobile\//,
72+
],
73+
} : {}),
5074
output: {
5175
manualChunks(id) {
5276
if (id.includes('node_modules/three/')) return 'three';
5377
if (id.includes('node_modules/ethers/')) return 'ethers';
54-
if (id.includes('node_modules/@solana/web3.js/') || id.includes('node_modules/@solana/spl-token/') || id.includes('node_modules/@solana/actions/') || id.includes('node_modules/@solana/kit/')) return 'solana';
78+
if (id.includes('node_modules/@solana/web3.js/') || id.includes('node_modules/@solana/spl-token/') || id.includes('node_modules/@solana/actions/') || id.includes('node_modules/@solana/kit/') || id.includes('node_modules/@bonfida/')) return 'solana';
5579
if (id.includes('node_modules/livekit-client/') || id.includes('node_modules/@livekit/')) return 'livekit';
5680
if (id.includes('node_modules/@pump-fun/pump-sdk/') || id.includes('node_modules/@pump-fun/pump-swap-sdk/')) return 'pump';
5781
if (id.includes('node_modules/@jup-ag/')) return 'jup';
58-
if (id.includes('node_modules/@bonfida/')) return 'bonfida';
5982
if (id.includes('node_modules/@pythnetwork/')) return 'pyth';
6083
if (id.includes('node_modules/@metaplex-foundation/') || id.includes('node_modules/@noble/curves/')) return 'crypto';
6184
if (id.includes('node_modules/@coral-xyz/anchor/')) return 'anchor';
6285
},
6386
},
64-
input: {
87+
input: FAST_BUILD ? {
88+
// Minimal set for local/CI builds on memory-constrained machines.
89+
// Vercel uses build:vercel which bypasses the FAST_BUILD flag and
90+
// builds all entries via `vite build` directly.
91+
app: resolve(__dirname, 'app.html'),
92+
main: resolve(__dirname, 'index.html'),
93+
} : {
6594
main: resolve(__dirname, 'index.html'),
6695
app: resolve(__dirname, 'app.html'),
6796
home: resolve(__dirname, 'home.html'),
@@ -250,7 +279,7 @@ const appConfig = {
250279
});
251280
},
252281
},
253-
VitePWA({
282+
...(FAST_BUILD ? [] : [VitePWA({
254283
registerType: 'autoUpdate',
255284
includeAssets: ['favicon.ico', 'pwa-192x192.png', 'pwa-512x512.png', 'pwa-icon.svg'],
256285
manifest: {
@@ -275,8 +304,8 @@ const appConfig = {
275304
],
276305
},
277306
workbox: {
278-
maximumFileSizeToCacheInBytes: 2 * 1024 * 1024,
279-
globPatterns: ['**/*.{js,css,html,ico,woff2}'],
307+
maximumFileSizeToCacheInBytes: 256 * 1024,
308+
globPatterns: ['**/*.{html,ico}'],
280309
globIgnores: [
281310
'**/animations/**',
282311
'**/avatars/**',
@@ -314,7 +343,7 @@ const appConfig = {
314343
},
315344
],
316345
},
317-
}),
346+
})]),
318347
],
319348
};
320349

0 commit comments

Comments
 (0)