qwik
qwik copied to clipboard
[π] serializeQRL: Cannot resolve symbol when build with bun in docker
Which component is affected?
Qwik Runtime
Describe the bug
I am creating a new project using bun 1.2
bun create qwik@latest
Then I add a bun adapter
bun run qwik add bun
Then I can run project using
bun run dev
Also I can build project on my local machine (Linux mint)
bun run build
And then serve it
bun run serve
The issue appear when I want to dockerize my application I have a Dockerfile like that
FROM oven/bun:1-alpine
WORKDIR /opt/app
COPY package.json .
RUN bun install
COPY . .
RUN bun run build
ENTRYPOINT ["bun"]
EXPOSE 3000
CMD ["run", "serve"]
I use this command to build cimage
docker build . -f ./Dockerfile -t qwik_project:test
And during build I have got an error
Starting Qwik City SSG...
5.414 Missing client manifest, loading symbols in the client might 404. Please ensure the client build has run and generated the manifest for the server build.
5.426 serializeQRL: Cannot resolve symbol s_x10PYepITvU in null undefined
5.428 QWIK ERROR Code(31) https://github.com/QwikDev/qwik/blob/main/packages/qwik/src/core/error/error.ts#L39 s_x10PYepITvU Error: Code(31) https://github.com/QwikDev/qwik/blob/main/packages/qwik/src/core/error/error.ts#L39
5.428 at createAndLogError (/opt/app/server/q-ThznMd5o.js:31:56)
5.428 at serializeQRL (/opt/app/server/q-ThznMd5o.js:3616:11)
5.428 at mapJoin (/opt/app/server/q-ThznMd5o.js:3351:16)
5.428 at renderNode (/opt/app/server/q-ThznMd5o.js:845:52)
5.428 at <anonymous> (/opt/app/server/q-ThznMd5o.js:944:22)
5.428 at reduce (native:1:11)
5.428 at renderNodeVirtual (/opt/app/server/q-ThznMd5o.js:655:19)
5.428 at renderNodeVirtual (/opt/app/server/q-ThznMd5o.js:655:19)
5.428 at <anonymous> (/opt/app/server/q-ThznMd5o.js:944:22)
5.428 at reduce (native:1:11)
5.433 28 | };
5.433 29 | const printParams = (optionalParams) => optionalParams;
5.433 30 | const createAndLogError = (asyncThrow, message, ...optionalParams) => {
5.433 31 | const err = message instanceof Error ? message : new Error(message);
5.433 32 | return console.error("%cQWIK ERROR", "", err.message, ...printParams(optionalParams), err.stack), asyncThrow && setTimeout(() => {
5.433 33 | throw err;
5.433 ^
5.433 error: Code(31) https://github.com/QwikDev/qwik/blob/main/packages/qwik/src/core/error/error.ts#L39
5.433 at <anonymous> (/opt/app/server/q-ThznMd5o.js:33:11)
5.433
5.433 Bun v1.2.12 (Linux x64 baseline)
5.457 error: script "build.server" exited with code 1
5.458
5.458 undefined
5.458
5.459 3579 | const message = [shortMessage, stderr, stdout].filter(Boolean).join("\n");
5.459 3580 | if (isError) {
5.459 3581 | error.originalMessage = error.message;
5.459 3582 | error.message = message;
5.459 3583 | } else {
5.459 3584 | error = new Error(message);
5.459 ^
5.459 error: Command failed with exit code 1: bun run build.server
5.459 shortMessage: "Command failed with exit code 1: bun run build.server",
5.459 command: "bun run build.server",
5.459 escapedCommand: "bun run build.server",
5.459 exitCode: 1,
5.459 signal: undefined,
5.459 signalDescription: undefined,
5.459 stdout: undefined,
5.459 stderr: undefined,
5.459 cwd: "/opt/app",
5.459 failed: true,
5.459 timedOut: false,
5.459 isCanceled: false,
5.459 killed: false,
5.459
5.459 at makeError (/opt/app/node_modules/@builder.io/qwik/dist/cli.cjs:3584:13)
5.459 at <anonymous> (/opt/app/node_modules/@builder.io/qwik/dist/cli.cjs:4496:29)
5.459
5.460
6.765 error: script "build" exited with code 1
------
Dockerfile:24
--------------------
22 | COPY . .
23 |
24 | >>> RUN bun run build
25 |
26 |
--------------------
ERROR: failed to solve: process "/bin/sh -c bun run build" did not complete successfully: exit code: 1
this happens in one of /server bundle, here is a place
const serializeQRL = (qrl2, opts = {}) => {
var _a2, _b2;
let symbol = qrl2.$symbol$;
let chunk = qrl2.$chunk$;
const refSymbol = qrl2.$refSymbol$ ?? symbol;
const platform = getPlatform();
if (platform) {
const result = platform.chunkForSymbol(refSymbol, chunk, (_a2 = qrl2.dev) == null ? void 0 : _a2.file);
result ? (chunk = result[1], qrl2.$refSymbol$ || (symbol = result[0])) : console.error("serializeQRL: Cannot resolve symbol", symbol, "in", chunk, (_b2 = qrl2.dev) == null ? void 0 : _b2.file);
}
I tried to build project with node then run with bun in docker and it works fine, so the problem in the bun build step
Reproduction
https://google.com
Steps to reproduce
bun create qwik@latest
bun run qwik add bun
docker build . -f ./Dockerfile -t qwik_project:test
System Info
System:
OS: Linux 5.15 Linux Mint 21.3 (Virginia)
CPU: (6) x64 Intel(R) Core(TM) i5-9600K CPU @ 3.70GHz
Memory: 7.11 GB / 15.55 GB
Container: Yes
Shell: 5.8.1 - /usr/bin/zsh
Binaries:
Node: 20.12.2 - ~/.nvm/versions/node/v20.12.2/bin/node
Yarn: 1.22.19 - ~/.yarn/bin/yarn
npm: 10.5.0 - ~/.nvm/versions/node/v20.12.2/bin/npm
pnpm: 9.3.0 - ~/.nvm/versions/node/v20.12.2/bin/pnpm
bun: 1.2.12 - ~/.bun/bin/bun
Browsers:
Chrome: 136.0.7103.59
npmPackages:
@builder.io/qwik: ^1.13.0 => 1.13.0
@builder.io/qwik-city: ^1.13.0 => 1.13.0
typescript: 5.4.5 => 5.4.5
undici: * => 7.8.0
vite: 5.3.5 => 5.3.5
Additional Information
No response
The reason it fails is the missing client manifest. It should exist in dist/q-manifest.json before the server builds starts.
When I build on local machine everything fine, this happens only in docker, how to fix that? I can assume that client and server builds are doing in parallel and server start earlier than client finishes, but I don't know how it works internally in qwik
I presume it's because the client build happens in a different container? Maybe the dockerfile needs tweaking to expose the client build?
FROM oven/bun:1-alpine
WORKDIR /opt/app
COPY package.json .
RUN bun install
COPY . .
RUN bun run build.client
RUN bun run build.server
EXPOSE 3000
ENTRYPOINT ["bun"]
CMD ["run", "serve"]
I have a Dockerfile like this, so build is doing in a one container
I have divided a build command into two steps bun run build.client and bun run build.server
but it still says an error on build.server step
Starting Qwik City SSG...
1.953 Missing client manifest, loading symbols in the client might 404. Please ensure the client build has run and generated the manifest for the server build.
1.962 serializeQRL: Cannot resolve symbol s_x10PYepITvU in null undefined
1.963 QWIK ERROR Code(31) https://github.com/QwikDev/qwik/blob/main/packages/qwik/src/core/error/error.ts#L39 s_x10PYepITvU Error: Code(31) https://github.com/QwikDev/qwik/blob/main/packages/qwik/src/core/error/error.ts#L39
1.963 at createAndLogError (/opt/app/server/q-ThznMd5o.js:31:56)
--------------------
10 |
11 | RUN bun run build.client
12 | >>> RUN bun run build.server
13 |
14 | EXPOSE 3000
--------------------
@wmertens I am also facing the same issue. When I check the files in dist has q-manifest.json is available. Please take a look at the logs and let me know if you need additional details:
[1/2] STEP 10/10: RUN bun run build
$ qwik build
............
.::: :--------:.
.:::: .:-------:.
.:::::. .:-------.
::::::. .:------.
::::::. :-----:
::::::. .:-----.
:::::::. .-----.
::::::::.. ---:.
.:::::::::. :-:.
..::::::::::::
...::::
bun run build.types
bun run build.client
bun run build.server
bun run lint
$ tsc --incremental --noEmit --pretty
$ vite build
using deprecated parameters for the initialization function; pass a single object instead
vite v5.3.5 building for production...
transforming...
/*! πΌ daisyUI 5.0.35 */
β 144 modules transformed.
rendering chunks...
computing gzip size...
dist/build/q-bundle-graph-h7pgc6.json 1.36 kB β gzip: 0.66 kB
dist/qwik-prefetch-service-worker.js 3.91 kB
dist/q-manifest.json 43.39 kB β gzip: 5.24 kB
dist/assets/CL2ZN89s-style.css 42.24 kB β gzip: 8.56 kB
dist/build/q-DmOpb5oI.js 0.07 kB β gzip: 0.09 kB
dist/build/q-BZ6aua4d.js 0.12 kB β gzip: 0.13 kB
dist/build/q-FY-lGNUR.js 0.13 kB β gzip: 0.12 kB
dist/build/q-DoVPM3cc.js 0.14 kB β gzip: 0.13 kB
dist/build/q-eqX_Ws4k.js 0.15 kB β gzip: 0.15 kB
dist/build/q-DcBveyVk.js 0.15 kB β gzip: 0.13 kB
dist/build/q-DW8L1dVR.js 0.15 kB β gzip: 0.15 kB
dist/build/q-e8nIAmK3.js 0.15 kB β gzip: 0.15 kB
dist/build/q-Bjm_sgt1.js 0.16 kB β gzip: 0.14 kB
dist/build/q-CK4dgX51.js 0.17 kB β gzip: 0.15 kB
dist/build/q-VXedpdZd.js 0.17 kB β gzip: 0.15 kB
dist/build/q-DWXaUHjK.js 0.17 kB β gzip: 0.15 kB
dist/build/q-DAIkyhPT.js 0.23 kB β gzip: 0.19 kB
dist/build/q-UzVaC_Ls.js 0.25 kB β gzip: 0.22 kB
dist/build/q-BaoT0aYz.js 0.27 kB β gzip: 0.22 kB
dist/build/q-CTrAdxEi.js 0.27 kB β gzip: 0.23 kB
dist/build/q-ClWJHSzN.js 0.29 kB β gzip: 0.24 kB
dist/build/q-Dxzs3sDw.js 0.29 kB β gzip: 0.24 kB
dist/build/q-CcmVfV2U.js 0.29 kB β gzip: 0.25 kB
dist/build/q-Bbd0Fgyb.js 0.31 kB β gzip: 0.24 kB
dist/build/q-B6NECfOr.js 0.32 kB β gzip: 0.24 kB
dist/build/q-BRTQuU_5.js 0.34 kB β gzip: 0.27 kB
dist/build/q-BvkCDrgT.js 0.34 kB β gzip: 0.26 kB
dist/build/q-C6PiqB0L.js 0.36 kB β gzip: 0.27 kB
dist/build/q-MwGv3MnP.js 0.36 kB β gzip: 0.27 kB
dist/build/q-Ba-l3zlH.js 0.37 kB β gzip: 0.26 kB
dist/build/q-CUkrK6MH.js 0.38 kB β gzip: 0.27 kB
dist/build/q-DkJxQ78m.js 0.39 kB β gzip: 0.28 kB
dist/build/q-CXoND9DX.js 0.40 kB β gzip: 0.27 kB
dist/build/q-DteK5TFV.js 0.47 kB β gzip: 0.38 kB
dist/build/q-LDzzoBwE.js 0.48 kB β gzip: 0.31 kB
dist/build/q-FvYEUprM.js 0.52 kB β gzip: 0.33 kB
dist/build/q-8Lrpr-WC.js 0.55 kB β gzip: 0.35 kB
dist/build/q-OsjhL-8Z.js 0.62 kB β gzip: 0.42 kB
dist/build/q-DQttD-2-.js 0.63 kB β gzip: 0.39 kB
dist/build/q-B7HAszCg.js 0.64 kB β gzip: 0.39 kB
dist/build/q-CqAl2Ao4.js 0.66 kB β gzip: 0.33 kB
dist/build/q-CwWkpWOz.js 0.68 kB β gzip: 0.52 kB
dist/build/q-D9blul2s.js 0.75 kB β gzip: 0.43 kB
dist/build/q-BkbipUX5.js 0.81 kB β gzip: 0.48 kB
dist/build/q-Dtx_P74N.js 0.90 kB β gzip: 0.45 kB
dist/build/q-QN_-q3XK.js 0.96 kB β gzip: 0.57 kB
dist/build/q-DQR-QHru.js 1.01 kB β gzip: 0.59 kB
dist/build/q-uemlvruI.js 1.08 kB β gzip: 0.62 kB
dist/build/q-RwbV8LUn.js 1.23 kB β gzip: 0.67 kB
dist/build/q-MDtxbKfe.js 1.25 kB β gzip: 0.73 kB
dist/build/q-CSmX_mSz.js 1.33 kB β gzip: 0.69 kB
dist/build/q-CYxtdWwp.js 1.52 kB β gzip: 0.79 kB
dist/build/q-BW25uXV8.js 2.05 kB β gzip: 0.76 kB
dist/build/q-B5NaC6Ac.js 2.14 kB β gzip: 1.04 kB
dist/build/q-BZC_Tl3d.js 2.19 kB β gzip: 0.90 kB
dist/build/q-D8meH-9D.js 2.30 kB β gzip: 1.11 kB
dist/build/q-dybrWh_l.js 2.41 kB β gzip: 0.97 kB
dist/service-worker.js 2.81 kB β gzip: 1.31 kB
dist/build/q-BSGfoyhh.js 3.66 kB β gzip: 1.62 kB
dist/build/q-BTsagoLC.js 4.47 kB β gzip: 1.43 kB
dist/build/q-CvKuo6aI.js 9.92 kB β gzip: 4.53 kB
dist/build/q-BHMC5f3w.js 67.82 kB β gzip: 24.56 kB
dist/build/q-DeDSsC1a.js 108.32 kB β gzip: 29.36 kB
β built in 7.75s
β Built client modules
$ vite build -c adapters/bun/vite.config.ts
$ eslint "src/**/*.ts*"
using deprecated parameters for the initialization function; pass a single object instead
vite v5.3.5 building SSR bundle for production...
transforming...
/*! πΌ daisyUI 5.0.35 */
β 27 modules transformed.
rendering chunks...
server/assets/FfzZttyQ-style.css 67.67 kB
server/entry.ssr.js 0.09 kB
server/@qwik-city-plan.js 35.75 kB
server/q-CLeM2_VB.js 38.34 kB
server/entry.bun.js 53.95 kB
server/q-D8-9yd0W.js 201.68 kB
β built in 4.47s
Starting Qwik City SSG...
Missing client manifest, loading symbols in the client might 404. Please ensure the client build has run and generated the manifest for the server build.
Missing client manifest, loading symbols in the client might 404. Please ensure the client build has run and generated the manifest for the server build.
serializeQRL: Cannot resolve symbol <sync> in undefined
serializeQRL: Cannot resolve symbol s_NaP7UUp8w0g in null undefined
QWIK ERROR Code(31) https://github.com/QwikDev/qwik/blob/main/packages/qwik/src/core/error/error.ts#L39 s_NaP7UUp8w0g Error: Code(31) https://github.com/QwikDev/qwik/blob/main/packages/qwik/src/core/error/error.ts#L39
at createAndLogError (/app/server/q-D8-9yd0W.js:31:56)
at serializeQRL (/app/server/q-D8-9yd0W.js:3654:11)
at mapJoin (/app/server/q-D8-9yd0W.js:3389:16)
at renderNode (/app/server/q-D8-9yd0W.js:851:52)
at renderNodeVirtual (/app/server/q-D8-9yd0W.js:661:19)
at renderNode (/app/server/q-D8-9yd0W.js:868:21)
at <anonymous> (/app/server/q-D8-9yd0W.js:950:22)
at reduce (native:1:11)
at renderNode (/app/server/q-D8-9yd0W.js:868:21)
at renderNodeVirtual (/app/server/q-D8-9yd0W.js:661:19)
serializeQRL: Cannot resolve symbol <sync> in undefined
serializeQRL: Cannot resolve symbol s_NaP7UUp8w0g in null undefined
QWIK ERROR Code(31) https://github.com/QwikDev/qwik/blob/main/packages/qwik/src/core/error/error.ts#L39 s_NaP7UUp8w0g Error: Code(31) https://github.com/QwikDev/qwik/blob/main/packages/qwik/src/core/error/error.ts#L39
at createAndLogError (/app/server/q-D8-9yd0W.js:31:56)
at serializeQRL (/app/server/q-D8-9yd0W.js:3654:11)
at mapJoin (/app/server/q-D8-9yd0W.js:3389:16)
at renderNode (/app/server/q-D8-9yd0W.js:851:52)
at renderNodeVirtual (/app/server/q-D8-9yd0W.js:661:19)
at renderNode (/app/server/q-D8-9yd0W.js:868:21)
at <anonymous> (/app/server/q-D8-9yd0W.js:950:22)
at reduce (native:1:11)
at renderNode (/app/server/q-D8-9yd0W.js:868:21)
at renderNodeVirtual (/app/server/q-D8-9yd0W.js:661:19)
!!! /: Error during SSG
Code(31) https://github.com/QwikDev/qwik/blob/main/packages/qwik/src/core/error/error.ts#L39
Pathname: /
dist/index.html
Plugin: qwik-ssg
File: /app/server/q-D8-9yd0W.js:31:56
29 | const printParams = (optionalParams) => optionalParams;
30 | const createAndLogError = (asyncThrow, message, ...optionalParams) => {
31 | const err = message instanceof Error ? message : new Error(message);
| ^
32 | return console.error("%cQWIK ERROR", "", err.message, ...printParams(optionalParams), err.stack), asyncThrow && setTimeout(() => {
33 | throw err;
at createAndLogError (/app/server/q-D8-9yd0W.js:31:56)
at serializeQRL (/app/server/q-D8-9yd0W.js:3654:11)
at mapJoin (/app/server/q-D8-9yd0W.js:3389:16)
at renderNode (/app/server/q-D8-9yd0W.js:851:52)
at renderNodeVirtual (/app/server/q-D8-9yd0W.js:661:19)
at renderNode (/app/server/q-D8-9yd0W.js:868:21)
at <anonymous> (/app/server/q-D8-9yd0W.js:950:22)
at reduce (native:1:11)
at renderNode (/app/server/q-D8-9yd0W.js:868:21)
at renderNodeVirtual (/app/server/q-D8-9yd0W.js:661:19)
!!! /user/login/: Error during SSG
Code(31) https://github.com/QwikDev/qwik/blob/main/packages/qwik/src/core/error/error.ts#L39
Pathname: /user/login/
dist/user/login/index.html
Plugin: qwik-ssg
File: /app/server/q-D8-9yd0W.js:31:56
29 | const printParams = (optionalParams) => optionalParams;
30 | const createAndLogError = (asyncThrow, message, ...optionalParams) => {
31 | const err = message instanceof Error ? message : new Error(message);
| ^
32 | return console.error("%cQWIK ERROR", "", err.message, ...printParams(optionalParams), err.stack), asyncThrow && setTimeout(() => {
33 | throw err;
at createAndLogError (/app/server/q-D8-9yd0W.js:31:56)
at serializeQRL (/app/server/q-D8-9yd0W.js:3654:11)
at mapJoin (/app/server/q-D8-9yd0W.js:3389:16)
at renderNode (/app/server/q-D8-9yd0W.js:851:52)
at renderNodeVirtual (/app/server/q-D8-9yd0W.js:661:19)
at renderNode (/app/server/q-D8-9yd0W.js:868:21)
at <anonymous> (/app/server/q-D8-9yd0W.js:950:22)
at reduce (native:1:11)
at renderNode (/app/server/q-D8-9yd0W.js:868:21)
at renderNodeVirtual (/app/server/q-D8-9yd0W.js:661:19)
28 | };
29 | const printParams = (optionalParams) => optionalParams;
30 | const createAndLogError = (asyncThrow, message, ...optionalParams) => {
31 | const err = message instanceof Error ? message : new Error(message);
32 | return console.error("%cQWIK ERROR", "", err.message, ...printParams(optionalParams), err.stack), asyncThrow && setTimeout(() => {
33 | throw err;
^
error: Code(31) https://github.com/QwikDev/qwik/blob/main/packages/qwik/src/core/error/error.ts#L39
at <anonymous> (/app/server/q-D8-9yd0W.js:33:11)
28 | };
29 | const printParams = (optionalParams) => optionalParams;
30 | const createAndLogError = (asyncThrow, message, ...optionalParams) => {
31 | const err = message instanceof Error ? message : new Error(message);
32 | return console.error("%cQWIK ERROR", "", err.message, ...printParams(optionalParams), err.stack), asyncThrow && setTimeout(() => {
33 | throw err;
^
error: Code(31) https://github.com/QwikDev/qwik/blob/main/packages/qwik/src/core/error/error.ts#L39
at <anonymous> (/app/server/q-D8-9yd0W.js:33:11)
Bun v1.2.13 (Linux x64 baseline)
error: script "build.server" exited with code 1
undefined
3579 | const message = [shortMessage, stderr, stdout].filter(Boolean).join("\n");
3580 | if (isError) {
3581 | error.originalMessage = error.message;
3582 | error.message = message;
3583 | } else {
3584 | error = new Error(message);
^
error: Command failed with exit code 1: bun run build.server
shortMessage: "Command failed with exit code 1: bun run build.server",
command: "bun run build.server",
escapedCommand: "bun run build.server",
exitCode: 1,
signal: undefined,
signalDescription: undefined,
stdout: undefined,
stderr: undefined,
cwd: "/app",
failed: true,
timedOut: false,
isCanceled: false,
killed: false,
at makeError (/app/node_modules/@builder.io/qwik/dist/cli.cjs:3584:13)
at <anonymous> (/app/node_modules/@builder.io/qwik/dist/cli.cjs:4496:29)
error: script "build" exited with code 1
building at STEP "RUN bun run build": while running runtime: exit status 1
Can you put an ls dist/*json command between the build commands to make sure the file is there?
@wmertens Here you go. Added the ls after build.client (See STEP 11/12):
[1/2] STEP 9/12: RUN bun run build.types
$ tsc --incremental --noEmit
--> 3a9f4853ce92
[1/2] STEP 10/12: RUN bun run build.client
$ vite build
using deprecated parameters for the initialization function; pass a single object instead
vite v5.3.5 building for production...
transforming...
/*! πΌ daisyUI 5.0.35 */
β 144 modules transformed.
rendering chunks...
computing gzip size...
dist/build/q-bundle-graph-h7pgc6.json 1.36 kB β gzip: 0.66 kB
dist/qwik-prefetch-service-worker.js 3.91 kB
dist/q-manifest.json 43.39 kB β gzip: 5.24 kB
dist/assets/CL2ZN89s-style.css 42.24 kB β gzip: 8.56 kB
dist/build/q-DmOpb5oI.js 0.07 kB β gzip: 0.09 kB
dist/build/q-BZ6aua4d.js 0.12 kB β gzip: 0.13 kB
dist/build/q-FY-lGNUR.js 0.13 kB β gzip: 0.12 kB
dist/build/q-DoVPM3cc.js 0.14 kB β gzip: 0.13 kB
dist/build/q-eqX_Ws4k.js 0.15 kB β gzip: 0.15 kB
dist/build/q-DcBveyVk.js 0.15 kB β gzip: 0.13 kB
dist/build/q-DW8L1dVR.js 0.15 kB β gzip: 0.15 kB
dist/build/q-e8nIAmK3.js 0.15 kB β gzip: 0.15 kB
dist/build/q-Bjm_sgt1.js 0.16 kB β gzip: 0.14 kB
dist/build/q-CK4dgX51.js 0.17 kB β gzip: 0.15 kB
dist/build/q-VXedpdZd.js 0.17 kB β gzip: 0.15 kB
dist/build/q-DWXaUHjK.js 0.17 kB β gzip: 0.15 kB
dist/build/q-DAIkyhPT.js 0.23 kB β gzip: 0.19 kB
dist/build/q-UzVaC_Ls.js 0.25 kB β gzip: 0.22 kB
dist/build/q-BaoT0aYz.js 0.27 kB β gzip: 0.22 kB
dist/build/q-CTrAdxEi.js 0.27 kB β gzip: 0.23 kB
dist/build/q-ClWJHSzN.js 0.29 kB β gzip: 0.24 kB
dist/build/q-Dxzs3sDw.js 0.29 kB β gzip: 0.24 kB
dist/build/q-CcmVfV2U.js 0.29 kB β gzip: 0.25 kB
dist/build/q-Bbd0Fgyb.js 0.31 kB β gzip: 0.24 kB
dist/build/q-B6NECfOr.js 0.32 kB β gzip: 0.24 kB
dist/build/q-BRTQuU_5.js 0.34 kB β gzip: 0.27 kB
dist/build/q-BvkCDrgT.js 0.34 kB β gzip: 0.26 kB
dist/build/q-MwGv3MnP.js 0.36 kB β gzip: 0.27 kB
dist/build/q-C6PiqB0L.js 0.36 kB β gzip: 0.27 kB
dist/build/q-Ba-l3zlH.js 0.37 kB β gzip: 0.26 kB
dist/build/q-CUkrK6MH.js 0.38 kB β gzip: 0.27 kB
dist/build/q-DkJxQ78m.js 0.39 kB β gzip: 0.28 kB
dist/build/q-CXoND9DX.js 0.40 kB β gzip: 0.27 kB
dist/build/q-DteK5TFV.js 0.47 kB β gzip: 0.38 kB
dist/build/q-LDzzoBwE.js 0.48 kB β gzip: 0.31 kB
dist/build/q-FvYEUprM.js 0.52 kB β gzip: 0.33 kB
dist/build/q-8Lrpr-WC.js 0.55 kB β gzip: 0.35 kB
dist/build/q-OsjhL-8Z.js 0.62 kB β gzip: 0.42 kB
dist/build/q-DQttD-2-.js 0.63 kB β gzip: 0.39 kB
dist/build/q-B7HAszCg.js 0.64 kB β gzip: 0.39 kB
dist/build/q-CqAl2Ao4.js 0.66 kB β gzip: 0.33 kB
dist/build/q-CwWkpWOz.js 0.68 kB β gzip: 0.52 kB
dist/build/q-D9blul2s.js 0.75 kB β gzip: 0.43 kB
dist/build/q-BkbipUX5.js 0.81 kB β gzip: 0.48 kB
dist/build/q-Dtx_P74N.js 0.90 kB β gzip: 0.45 kB
dist/build/q-QN_-q3XK.js 0.96 kB β gzip: 0.57 kB
dist/build/q-DQR-QHru.js 1.01 kB β gzip: 0.59 kB
dist/build/q-uemlvruI.js 1.08 kB β gzip: 0.62 kB
dist/build/q-RwbV8LUn.js 1.23 kB β gzip: 0.67 kB
dist/build/q-MDtxbKfe.js 1.25 kB β gzip: 0.73 kB
dist/build/q-CSmX_mSz.js 1.33 kB β gzip: 0.69 kB
dist/build/q-CYxtdWwp.js 1.52 kB β gzip: 0.79 kB
dist/build/q-BW25uXV8.js 2.05 kB β gzip: 0.76 kB
dist/build/q-B5NaC6Ac.js 2.14 kB β gzip: 1.04 kB
dist/build/q-BZC_Tl3d.js 2.19 kB β gzip: 0.90 kB
dist/build/q-D8meH-9D.js 2.30 kB β gzip: 1.11 kB
dist/build/q-dybrWh_l.js 2.41 kB β gzip: 0.97 kB
dist/service-worker.js 2.81 kB β gzip: 1.31 kB
dist/build/q-BSGfoyhh.js 3.66 kB β gzip: 1.62 kB
dist/build/q-BTsagoLC.js 4.47 kB β gzip: 1.43 kB
dist/build/q-CvKuo6aI.js 9.92 kB β gzip: 4.53 kB
dist/build/q-BHMC5f3w.js 67.82 kB β gzip: 24.56 kB
dist/build/q-DeDSsC1a.js 108.32 kB β gzip: 29.36 kB
β built in 14.21s
--> b5b074cfffe2
[1/2] STEP 11/12: RUN ls dist/*.json
dist/manifest.json
dist/q-manifest.json
--> ca1aa242a722
[1/2] STEP 12/12: RUN bun run build.server
$ vite build -c adapters/bun/vite.config.ts
using deprecated parameters for the initialization function; pass a single object instead
vite v5.3.5 building SSR bundle for production...
transforming...
/*! πΌ daisyUI 5.0.35 */
β 27 modules transformed.
rendering chunks...
server/assets/FfzZttyQ-style.css 67.67 kB
server/entry.ssr.js 0.09 kB
server/@qwik-city-plan.js 35.75 kB
server/q-CLeM2_VB.js 38.34 kB
server/entry.bun.js 53.95 kB
server/q-D8-9yd0W.js 201.68 kB
β built in 7.60s
Starting Qwik City SSG...
Missing client manifest, loading symbols in the client might 404. Please ensure the client build has run and generated the manifest for the server build.
Missing client manifest, loading symbols in the client might 404. Please ensure the client build has run and generated the manifest for the server build.
serializeQRL: Cannot resolve symbol <sync> in undefined
serializeQRL: Cannot resolve symbol s_NaP7UUp8w0g in null undefined
QWIK ERROR Code(31) https://github.com/QwikDev/qwik/blob/main/packages/qwik/src/core/error/error.ts#L39 s_NaP7UUp8w0g Error: Code(31) https://github.com/QwikDev/qwik/blob/main/packages/qwik/src/core/error/error.ts#L39
at createAndLogError (/app/server/q-D8-9yd0W.js:31:56)
at serializeQRL (/app/server/q-D8-9yd0W.js:3654:11)
at mapJoin (/app/server/q-D8-9yd0W.js:3389:16)
at renderNode (/app/server/q-D8-9yd0W.js:851:52)
at renderNodeVirtual (/app/server/q-D8-9yd0W.js:661:19)
at renderNode (/app/server/q-D8-9yd0W.js:868:21)
at <anonymous> (/app/server/q-D8-9yd0W.js:950:22)
at reduce (native:1:11)
at renderNode (/app/server/q-D8-9yd0W.js:868:21)
at renderNodeVirtual (/app/server/q-D8-9yd0W.js:661:19)
serializeQRL: Cannot resolve symbol <sync> in undefined
serializeQRL: Cannot resolve symbol s_NaP7UUp8w0g in null undefined
QWIK ERROR Code(31) https://github.com/QwikDev/qwik/blob/main/packages/qwik/src/core/error/error.ts#L39 s_NaP7UUp8w0g Error: Code(31) https://github.com/QwikDev/qwik/blob/main/packages/qwik/src/core/error/error.ts#L39
at createAndLogError (/app/server/q-D8-9yd0W.js:31:56)
at serializeQRL (/app/server/q-D8-9yd0W.js:3654:11)
at mapJoin (/app/server/q-D8-9yd0W.js:3389:16)
at renderNode (/app/server/q-D8-9yd0W.js:851:52)
at renderNodeVirtual (/app/server/q-D8-9yd0W.js:661:19)
at renderNode (/app/server/q-D8-9yd0W.js:868:21)
at <anonymous> (/app/server/q-D8-9yd0W.js:950:22)
at reduce (native:1:11)
at renderNode (/app/server/q-D8-9yd0W.js:868:21)
at renderNodeVirtual (/app/server/q-D8-9yd0W.js:661:19)
!!! /: Error during SSG
Code(31) https://github.com/QwikDev/qwik/blob/main/packages/qwik/src/core/error/error.ts#L39
Pathname: /
Plugin: qwik-ssg
File: /app/server/q-D8-9yd0W.js:31:56
29 | const printParams = (optionalParams) => optionalParams;
30 | const createAndLogError = (asyncThrow, message, ...optionalParams) => {
31 | const err = message instanceof Error ? message : new Error(message);
| ^
32 | return console.error("%cQWIK ERROR", "", err.message, ...printParams(optionalParams), err.stack), asyncThrow && setTimeout(() => {
33 | throw err;
at createAndLogError (/app/server/q-D8-9yd0W.js:31:56)
at serializeQRL (/app/server/q-D8-9yd0W.js:3654:11)
at mapJoin (/app/server/q-D8-9yd0W.js:3389:16)
at renderNode (/app/server/q-D8-9yd0W.js:851:52)
at renderNodeVirtual (/app/server/q-D8-9yd0W.js:661:19)
at renderNode (/app/server/q-D8-9yd0W.js:868:21)
at <anonymous> (/app/server/q-D8-9yd0W.js:950:22)
at reduce (native:1:11)
at renderNode (/app/server/q-D8-9yd0W.js:868:21)
at renderNodeVirtual (/app/server/q-D8-9yd0W.js:661:19)
dist/index.html
!!! /user/login/: Error during SSG
Code(31) https://github.com/QwikDev/qwik/blob/main/packages/qwik/src/core/error/error.ts#L39
Pathname: /user/login/
dist/user/login/index.html
Plugin: qwik-ssg
File: /app/server/q-D8-9yd0W.js:31:56
29 | const printParams = (optionalParams) => optionalParams;
30 | const createAndLogError = (asyncThrow, message, ...optionalParams) => {
31 | const err = message instanceof Error ? message : new Error(message);
| ^
32 | return console.error("%cQWIK ERROR", "", err.message, ...printParams(optionalParams), err.stack), asyncThrow && setTimeout(() => {
33 | throw err;
at createAndLogError (/app/server/q-D8-9yd0W.js:31:56)
at serializeQRL (/app/server/q-D8-9yd0W.js:3654:11)
at mapJoin (/app/server/q-D8-9yd0W.js:3389:16)
at renderNode (/app/server/q-D8-9yd0W.js:851:52)
at renderNodeVirtual (/app/server/q-D8-9yd0W.js:661:19)
at renderNode (/app/server/q-D8-9yd0W.js:868:21)
at <anonymous> (/app/server/q-D8-9yd0W.js:950:22)
at reduce (native:1:11)
at renderNode (/app/server/q-D8-9yd0W.js:868:21)
at renderNodeVirtual (/app/server/q-D8-9yd0W.js:661:19)
28 | };
29 | const printParams = (optionalParams) => optionalParams;
30 | const createAndLogError = (asyncThrow, message, ...optionalParams) => {
31 | const err = message instanceof Error ? message : new Error(message);
32 | return console.error("%cQWIK ERROR", "", err.message, ...printParams(optionalParams), err.stack), asyncThrow && setTimeout(() => {
33 | throw err;
^
error: Code(31) https://github.com/QwikDev/qwik/blob/main/packages/qwik/src/core/error/error.ts#L39
at <anonymous> (/app/server/q-D8-9yd0W.js:33:11)
28 | };
29 | const printParams = (optionalParams) => optionalParams;
30 | const createAndLogError = (asyncThrow, message, ...optionalParams) => {
31 | const err = message instanceof Error ? message : new Error(message);
32 | return console.error("%cQWIK ERROR", "", err.message, ...printParams(optionalParams), err.stack), asyncThrow && setTimeout(() => {
33 | throw err;
^
error: Code(31) https://github.com/QwikDev/qwik/blob/main/packages/qwik/src/core/error/error.ts#L39
at <anonymous> (/app/server/q-D8-9yd0W.js:33:11)
Bun v1.2.9 (Linux x64 baseline)
error: script "build.server" exited with code 1
building at STEP "RUN bun run build.server": while running runtime: exit status 1
@wmertens I don't mind sharing my dockerfile(its very basic):
# ====================
# Build stage
# ====================
FROM oven/bun:1.2.9-alpine AS builder
WORKDIR /app
COPY . .
RUN bun install
RUN bun pm untrusted
RUN bun run build.types
RUN bun run build.client
RUN ls dist/*.json
RUN bun run build.server
# ====================
# Runtime stage
# ====================
FROM oven/bun:1.2.9-alpine AS runtime
WORKDIR /app
COPY --from=builder ./dist ./server ./
CMD bun server/entry.bun.js
@dmitryuck @wmertens A workaround for the issue right now is to use node/npm/pnpm in a multi-stage docker build as below. It is confirmed that Qwik is having issues with building with bun on docker.
I suspect that the issue has to do with bun behaving differently when NODE_ENV="production". I vaguely recall that it has more restriction while installing dependencies and file system access is also restricted (kind of like Deno). Will try to see if the bun docs to see if it can shed some light. Holler if you guys find anything.
# Uses node and npm for builds becuase building with bun is borked
# ====================
# Build stage
# ====================
FROM node:current-alpine3.21 AS builder
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build.types
RUN npm run build.client
RUN npm run build.server
# ====================
# Runtime stage
# ====================
FROM oven/bun:1.2.9-alpine AS runtime
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/server ./server
When I build on local machine everything fine
@dmitryuck do you have Node.js installed on your local machine? Do you use --bun flag when you build your project? If so, Bun will not replace node with bun in executables and run Vite as is (in Node.js, not Bun), hence no error. If you add the flag, the error will occur. And I can confirm it's still there.
I've been trying to fix this problem before, but it seems like I failed. I think I don't understand what the cause of the problem is.
Also, if you try to build preview entry - it will not fail for some reason, but you won't be able to run it, because Vite will throw the same error as soon as you open your app in a browser.
do you have Node.js installed on your local machine?
Yes, I have both node and bun installed on local computer, I do not use --bun flag, and building with bun run build
I'm experiencing the same issue, but after some investigation, I found that the error only happens when building the server-side with --bun (build.server):
bun --bun vite build -c adapters/bun/vite.config.ts
The client build (bunx --bun vite build) runs fine, and everything works perfectly in development, but the production server build fails during SSG with:
serializeQRL: Cannot resolve symbol s_qDi2nYY850A in null undefined
QWIK ERROR Code(31) https://github.com/QwikDev/qwik/blob/main/packages/qwik/src/core/error/error.ts#L39 s_qDi2nYY850A Error: Code(31) https://github.com/QwikDev/qwik/blob/main/packages/qwik/src/core/error/error.ts#L39
I've double-checked that the client manifest and the build artifacts are present and valid. This issue seems tightly linked to using Bun for the server build. Unfortunately, I must use Bun in my project due to internal features that rely on its runtime.
So this isnβt just a generic manifest/symbol resolution issue β it's specifically triggered by building the server with --bun.
If there's any workaround or insight on how QRL serialization behaves differently under Bun, Iβd love to hear it. I can also provide more details or logs if needed.
@siguici ok that was helpful.
The problem is here. This code is a weird hack that gets the manifest from a file under /tmp, but only if the build is running under nodejs.
- Workaround 1: provide the q-manifest contents manually for server builds in the qwikVite manifestInput
- Workaround 2: change that if statement to also check for "bun"
- Solution: kill all that code with fire and instead get read the q-manifest from the client outdir. Problem is that that location can change and the server will have a different outdir setting. So then just throw an error, asking for a clientOutdir setting or a populated manifestInput.
I can't think of a reason to allow building server without a q-manifest.
PRs very welcome, preferably for Solution, but I suppose Workaround 2 can fix it for now.
Solution 2 sounds like the most practical approach for now. Iβve already tried to remove any Bun-specific dependencies on my side to ensure the code runs more broadly.
Iβll experiment with the suggested solutions and, if everything works as expected, Iβll likely open a PR. Thanks for the detailed insight! π
I tested the pull request #7669. Works like a charm. Thanks for fixing π