Skip to content

Commit 9c9ee5f

Browse files
fix: properly handle @libsql/client native dependencies for Vercel deployment
- Mark @libsql/client as external in esbuild (cannot bundle native bindings) - Copy entire @libsql scope to include platform-specific binaries - Add @libsql to vercel.json includeFiles pattern Fixes "Cannot find module '@libsql/linux-x64-gnu'" error on Vercel Agent-Logs-Url: https://github.com/objectstack-ai/framework/sessions/b0b587fe-a979-4361-8899-62cbc1fe5261 Co-authored-by: xuyushun441-sys <255036401+xuyushun441-sys@users.noreply.github.com>
1 parent d0884ea commit 9c9ee5f

3 files changed

Lines changed: 16 additions & 5 deletions

File tree

apps/studio/scripts/build-vercel.sh

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ node scripts/bundle-api.mjs
3939
# apps/studio/, so we must copy the actual module files here for Vercel to
4040
# include them in the serverless function's deployment package.
4141
#
42-
# Note: @libsql/client is now bundled by esbuild, so we no longer copy it.
42+
# Note: @libsql/client has native dependencies that must be copied.
4343
echo "[build-vercel] Copying external native modules to local node_modules..."
4444
for mod in better-sqlite3; do
4545
src="../../node_modules/$mod"
@@ -52,6 +52,17 @@ for mod in better-sqlite3; do
5252
echo "[build-vercel] ⚠ $mod not found at $src (skipped)"
5353
fi
5454
done
55+
# Copy the @libsql scope (includes @libsql/client and native binaries like @libsql/linux-x64-gnu)
56+
if [ -d "../../node_modules/@libsql" ]; then
57+
mkdir -p "node_modules/@libsql"
58+
for pkg in ../../node_modules/@libsql/*/; do
59+
pkgname="$(basename "$pkg")"
60+
cp -rL "$pkg" "node_modules/@libsql/$pkgname"
61+
done
62+
echo "[build-vercel] ✓ Copied @libsql/*"
63+
else
64+
echo "[build-vercel] ⚠ @libsql not found (skipped)"
65+
fi
5566
# Copy the @ai-sdk scope (dynamically loaded provider packages)
5667
if [ -d "../../node_modules/@ai-sdk" ]; then
5768
mkdir -p "node_modules/@ai-sdk"

apps/studio/scripts/bundle-api.mjs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ import { build } from 'esbuild';
1616

1717
// Packages that cannot be bundled (native bindings / optional drivers)
1818
const EXTERNAL = [
19-
// @libsql/client is now bundled (pure JS, no native bindings)
20-
// Bundling it solves Vercel deployment issues where external packages
21-
// aren't properly included in the serverless function despite includeFiles config
19+
// @libsql/client has native bindings (platform-specific like @libsql/linux-x64-gnu)
20+
// and must be kept external, then copied to node_modules with includeFiles
21+
'@libsql/client',
2222
'better-sqlite3',
2323
// AI SDK provider packages — dynamically imported based on env vars
2424
'@ai-sdk/anthropic',

apps/studio/vercel.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"api/**/*.js": {
1414
"memory": 1024,
1515
"maxDuration": 300,
16-
"includeFiles": "node_modules/{better-sqlite3,@ai-sdk}/**"
16+
"includeFiles": "node_modules/{better-sqlite3,@libsql,@ai-sdk}/**"
1717
}
1818
},
1919
"headers": [

0 commit comments

Comments
 (0)