N
Nuxt3mo ago
AlexVeeBee

Build Failure After Upgrading from Nuxt 3 to Nuxt 4 in Docker (Linux) – Rollup Module Error

I’m encountering a build failure after upgrading my project from Nuxt 3 to Nuxt 4 when building in a Linux-based Docker environment. The project was building successfully with Nuxt 3, but after the upgrade to Nuxt 4, I’m seeing errors related to Rollup and native bindings. I need help identifying the root cause and finding a solution to successfully build my Nuxt 4 project in Docker. Issue Description After upgrading from Nuxt 3 to Nuxt 4, the Docker build fails with the following errors during the npm install step, specifically when running nuxt prepare:
Cannot find module '@rollup/rollup-linux-x64-musl'
Related cause: Cannot find module './parser.linux-x64-gnu.node'
Additional error message: Failed to load native binding
Cannot find module '@rollup/rollup-linux-x64-musl'
Related cause: Cannot find module './parser.linux-x64-gnu.node'
Additional error message: Failed to load native binding
Error Suggestion: - Indicates a potential npm bug with optional dependencies (referencing npm/cli#4828) - Suggests removing package-lock.json and node_modules before retrying npm install
The build process works fine on my local Windows machine (Node.js v22.17.0), but fails consistently in the Docker environment (Linux-based, using node:22.17.0-alpine).
GitHub
npm/cli
the package manager for JavaScript. Contribute to npm/cli development by creating an account on GitHub.
4 Replies
kapa.ai
kapa.ai3mo ago
Hi @AlexVeeBee. I'm kapa.ai, your friendly support bot. I will try to answer your question by searching through the knowledge base. :wave: ---------------------- Based on the information in the provided knowledge sources, your build failure after upgrading from Nuxt 3 to Nuxt 4 in a Linux-based Docker environment—specifically errors like:
Cannot find module '@rollup/rollup-linux-x64-musl'
Related cause: Cannot find module './parser.linux-x64-gnu.node'
Additional error message: Failed to load native binding
Cannot find module '@rollup/rollup-linux-x64-musl'
Related cause: Cannot find module './parser.linux-x64-gnu.node'
Additional error message: Failed to load native binding
is consistent with recent issues reported in the Nuxt ecosystem regarding native bindings and Rollup dependencies, especially when building in Docker or on Linux. Key Findings from Knowledge Sources 1. Native Binding Load Failures (oxc-parser, Rollup, etc.) - There are reports of build failures due to missing native bindings (e.g., parser.linux-x64-gnu.node) after upgrading Nuxt, particularly in Linux environments. This is often related to how Node.js resolves optional native dependencies and how package managers handle them in different environments. The issue is not always present on macOS or Windows, but appears in Linux Docker builds, especially with Alpine images and certain Node.js versions. - One such issue was observed after upgrading Nuxt, where the build failed with a native binding error. The root cause was traced to a change in dependencies (notably oxc-parser), and it was noted that the problem was specific to certain Node.js versions and platforms. For example, Node v18 (now EOL) was explicitly mentioned as problematic, but there were also reports of issues with Node v22 on Ubuntu, while it worked on macOS M1. Upgrading to Node v22.17.0 resolved the issue for at least one user, but another reported the problem persisted on Ubuntu 24 LTS with Node v22.13.0, but not on macOS M1. This suggests a platform and/or binary compatibility issue with native modules in the Nuxt/Rollup toolchain [Native binding load failure in Nuxt v3.17.6]. 2. Workarounds and Solutions - Node Version: Upgrading to the latest supported Node.js version (e.g., v22.17.0) resolved the issue for some users. Ensure your Docker image uses the exact same Node.js version as your local environment, as even minor differences can affect native module resolution. - Clean Install: Removing node_modules and package-lock.json (or pnpm-lock.yaml/yarn.lock if using other package managers) before running a fresh install is recommended, as lockfiles generated on one platform can cause native module mismatches on another (e.g., Windows vs. Linux) [Native binding load failure in Nuxt v3.17.6]. - Alpine Linux Issues: Alpine images use musl libc, which can cause compatibility issues with some native Node.js modules expecting glibc. If possible, try using a non-Alpine (Debian-based) Node.js image for your Docker build to see if the problem persists. - Optional Dependencies: The error message referencing an npm bug with optional dependencies is relevant. There are known issues where optional native dependencies are not installed or resolved correctly in some environments. Cleaning the install as above can help, but sometimes the only solution is to wait for upstream fixes or use a different base image. 3. Recent Nuxt Fixes - There is an open PR in Nuxt to fall back to WASM if oxc native bindings are missing, which may help in future releases, but this is not guaranteed to be available in your current version [fix(nuxt): fall back to wasm if oxc native bindings are missing]. Recommended Steps 1. Ensure Node.js Version Consistency - Use the same Node.js version in Docker as on your local machine (e.g., node:22.17.0). 2. Clean Install - Before building, add these lines to your Dockerfile before npm install:
RUN rm -rf node_modules package-lock.json

RUN rm -rf node_modules package-lock.json

- Then run npm install and npx nuxt prepare as usual. 3. Try a Non-Alpine Image - If you are using node:22.17.0-alpine, try switching to node:22.17.0 (Debian-based) to see if the issue is related to musl vs. glibc. 4. Monitor Upstream Fixes - Keep an eye on Nuxt and Rollup updates, as fixes for native binding issues are actively being worked on. Summary Your issue is likely caused by a combination of native module resolution problems, platform differences (Windows vs. Linux), and possibly the use of Alpine Linux. Cleaning your install and ensuring Node.js version parity are the most effective immediate steps. If the problem persists, try a Debian-based Node.js image and monitor for upstream fixes in Nuxt and its dependencies. If you need more specific guidance, please provide your Dockerfile and the exact Nuxt 4 version you are using. --- References:
- Native binding load failure in Nuxt v3.17.6
- fix(nuxt): fall back to wasm if oxc native bindings are missing ---------------------- Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: ----------------------
kapa.ai
kapa.ai3mo ago
<@166599852799557632> Kapa.ai is still learning and improving, please let me know how I did by reacting below.
AlexVeeBee
AlexVeeBeeOP3mo ago
human interaction is needed no one respoded :(
Deffcolony
Deffcolony3mo ago
i am having the same problem if anyone can help me solving nuxt 4 build errors would be much appreciated i tried the same dockerfile
# Stage 1: Build the application
FROM node:22.17.0-alpine AS builder

# Create directories for the builder and app
RUN mkdir -p /usr/src/app /usr/src/builder

# Set working directory for the builder
WORKDIR /usr/src/builder

# Copy package.json and package-lock.json
COPY package*.json ./

# Install all dependencies (including dev dependencies)
RUN npm install

# Copy the rest of the application code
COPY . .

# Build the application
RUN npm run build

# Copy the built files to the app directory
RUN cp -r /usr/src/builder/.output /usr/src/app

# Stage 2: Serve the application
FROM node:22.17.0-alpine

# Set working directory for the app
WORKDIR /usr/src/app

# Copy built files from the builder stage
COPY --from=builder /usr/src/app/.output /usr/src/app/.output

# Install only production dependencies
COPY package*.json ./
RUN npm install --omit=dev

# Expose the production server port
EXPOSE 3000

# Start the production server
CMD ["node", "/usr/src/app/.output/server/index.mjs"]
# Stage 1: Build the application
FROM node:22.17.0-alpine AS builder

# Create directories for the builder and app
RUN mkdir -p /usr/src/app /usr/src/builder

# Set working directory for the builder
WORKDIR /usr/src/builder

# Copy package.json and package-lock.json
COPY package*.json ./

# Install all dependencies (including dev dependencies)
RUN npm install

# Copy the rest of the application code
COPY . .

# Build the application
RUN npm run build

# Copy the built files to the app directory
RUN cp -r /usr/src/builder/.output /usr/src/app

# Stage 2: Serve the application
FROM node:22.17.0-alpine

# Set working directory for the app
WORKDIR /usr/src/app

# Copy built files from the builder stage
COPY --from=builder /usr/src/app/.output /usr/src/app/.output

# Install only production dependencies
COPY package*.json ./
RUN npm install --omit=dev

# Expose the production server port
EXPOSE 3000

# Start the production server
CMD ["node", "/usr/src/app/.output/server/index.mjs"]

Did you find this page helpful?