You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker构建Svelte+Vite项目报错:无法找到Vite依赖模块

问题描述

通过Github Actions使用Dockerfile部署包含Svelte+Vite前端的Java应用到Azure时遇到问题:本地构建正常,但Docker环境中构建失败:

  • npm install阶段出现svelte-hmr、@melt-ui/svelte与Svelte 5.x的peer依赖冲突警告,包安装虽完成但可能存在异常;
  • 执行npm run build时抛出ERR_MODULE_NOT_FOUND错误,无法找到/usr/src/app/learnify/frontend/node_modules/vite/dist/node/chunks/dep-Cyk9bIUq.js模块。
    已尝试降级Vite和Node.js版本,问题仍未解决。
错误日志
#8 [ 5/10] RUN cd learnify/frontend && npm install

#8 0.745 npm warn ERESOLVE overriding peer dependency

#8 0.746 npm warn While resolving: svelte-hmr@0.16.0

#8 0.746 npm warn Found: svelte@5.15.0

#8 0.746 npm warn node_modules/svelte

#8 0.746 npm warn dev svelte@"^5.0.0" from the root project

#8 0.746 npm warn 11 more (@sveltejs/kit, u/sveltejs/vite-plugin-svelte, ...)

#8 0.746 npm warn

#8 0.746 npm warn Could not resolve dependency:

#8 0.746 npm warn peer svelte@"^3.19.0 || ^4.0.0" from svelte-hmr@0.16.0

#8 0.746 npm warn node_modules/@sveltejs/vite-plugin-svelte/node_modules/svelte-hmr

#8 0.746 npm warn svelte-hmr@"^0.16.0" from u/sveltejs/vite-plugin-svelte@3.1.2

#8 0.746 npm warn node_modules/@sveltejs/vite-plugin-svelte

#8 0.746 npm warn

#8 0.746 npm warn Conflicting peer dependency: svelte@4.2.19

#8 0.746 npm warn node_modules/svelte

#8 0.746 npm warn peer svelte@"^3.19.0 || ^4.0.0" from svelte-hmr@0.16.0

#8 0.746 npm warn node_modules/@sveltejs/vite-plugin-svelte/node_modules/svelte-hmr

#8 0.746 npm warn svelte-hmr@"^0.16.0" from u/sveltejs/vite-plugin-svelte@3.1.2

#8 0.746 npm warn node_modules/@sveltejs/vite-plugin-svelte

#8 0.804 npm warn ERESOLVE overriding peer dependency

#8 0.804 npm warn While resolving: u/melt-ui/svelte@0.76.2

#8 0.804 npm warn Found: svelte@5.15.0

#8 0.804 npm warn node_modules/svelte

#8 0.804 npm warn dev svelte@"^5.0.0" from the root project

#8 0.804 npm warn 11 more (@sveltejs/kit, u/sveltejs/vite-plugin-svelte, ...)

#8 0.804 npm warn

#8 0.804 npm warn Could not resolve dependency:

#8 0.804 npm warn peer svelte@">=3 <5" from u/melt-ui/svelte@0.76.2

#8 0.804 npm warn node_modules/bits-ui/node_modules/@melt-ui/svelte

#8 0.804 npm warn u/melt-ui/svelte@"0.76.2" from bits-ui@0.21.16

#8 0.804 npm warn node_modules/bits-ui

#8 0.804 npm warn

#8 0.804 npm warn Conflicting peer dependency: svelte@4.2.19

#8 0.804 npm warn node_modules/svelte

#8 0.804 npm warn peer svelte@">=3 <5" from u/melt-ui/svelte@0.76.2

#8 0.804 npm warn node_modules/bits-ui/node_modules/@melt-ui/svelte

#8 0.804 npm warn u/melt-ui/svelte@"0.76.2" from bits-ui@0.21.16

#8 0.804 npm warn node_modules/bits-ui

#8 5.408

#8 5.408 added 255 packages, changed 1 package, and audited 319 packages in 5s

#8 5.409

#8 5.409 82 packages are looking for funding

#8 5.409 run `npm fund` for details

#8 5.419

#8 5.419 4 low severity vulnerabilities

#8 5.419

#8 5.419 To address all issues (including breaking changes), run:

#8 5.419 npm audit fix --force

#8 5.419

#8 5.419 Run `npm audit` for details.

#8 5.420 npm notice

#8 5.420 npm notice New major version of npm available! 10.8.2 -> 11.0.0

#8 5.420 npm notice Changelog:

#8 5.420 npm notice To update run: npm install -g npm@11.0.0

#8 5.420 npm notice

#8 DONE 5.9s

#9 [ 6/10] RUN cd learnify/frontend && npm run build

#9 0.310

#9 0.310 > frontend@0.0.1 build

#9 0.310 > vite build --emptyOutDir

#9 0.310

#9 0.363 node:internal/modules/esm/resolve:265

#9 0.363 throw new ERR_MODULE_NOT_FOUND(

#9 0.363 ^

#9 0.363

#9 0.363 Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/usr/src/app/learnify/frontend/node_modules/vite/dist/node/chunks/dep-Cyk9bIUq.js' imported from /usr/src/app/learnify/frontend/node_modules/vite/dist/node/cli.js

#9 0.363 at finalizeResolution (node:internal/modules/esm/resolve:265:11)

#9 0.363 at moduleResolve (node:internal/modules/esm/resolve:933:10)

#9 0.363 at defaultResolve (node:internal/modules/esm/resolve:1169:11)

#9 0.363 at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:542:12)

#9 0.363 at ModuleLoader.resolve (node:internal/modules/esm/loader:510:25)

#9 0.363 at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:239:38)

#9 0.363 at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:96:40)

#9 0.363 at link (node:internal/modules/esm/module_job:95:36) {

#9 0.363 code: 'ERR_MODULE_NOT_FOUND',

#9 0.363 url: 'file:///usr/src/app/learnify/frontend/node_modules/vite/dist/node/chunks/dep-Cyk9bIUq.js'

#9 0.363 }

#9 0.363

#9 0.363 Node.js v20.18.1

#9 ERROR: process "/bin/sh -c cd learnify/frontend && npm run build" did not complete successfully: exit code: 1

------

> [ 6/10] RUN cd learnify/frontend && npm run build:

0.363 at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:542:12)

0.363 at ModuleLoader.resolve (node:internal/modules/esm/loader:510:25)

0.363 at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:239:38)

0.363 at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:96:40)

0.363 at link (node:internal/modules/esm/module_job:95:36) {

0.363 code: 'ERR_MODULE_NOT_FOUND',

0.363 url: 'file:///usr/src/app/learnify/frontend/node_modules/vite/dist/node/chunks/dep-Cyk9bIUq.js'

0.363 }

0.363

0.363 Node.js v20.18.1

------

./Dockerfile:12

--------------------

10 |

11 | RUN cd learnify/frontend && npm install

12 | >>> RUN cd learnify/frontend && npm run build

13 | RUN rm -r frontend

14 |

--------------------

ERROR: failed to solve: process "/bin/sh -c cd learnify/frontend && npm run build" did not complete successfully: exit code: 1

Error: buildx failed with: ERROR: failed to solve: process "/bin/sh -c cd learnify/frontend && npm run build" did not complete successfully: exit code: 1
Dockerfile内容
FROM openjdk:21-jdk-slim
RUN apt-get update && apt-get install -y curl \
  && curl -sL https://deb.nodesource.com/setup_20.x | bash - \
  && apt-get install -y nodejs \
  && curl -L https://www.npmjs.com/install.sh | npm_install="10.9.0" | sh

WORKDIR /usr/src/app

COPY . .

RUN cd learnify/frontend && npm install
RUN cd learnify/frontend && npm run build
RUN rm -r frontend

RUN sed -i 's/\r$//' mvnw
RUN chmod +x mvnw
RUN ./mvnw package



EXPOSE 8080
CMD ["java", "-jar", "/usr/src/app/target/learnify-0.0.1-SNAPSHOT.jar"]
解决方案

1. 解决依赖兼容性问题

Svelte 5.x与当前使用的svelte-hmr、@melt-ui/svelte版本存在peer依赖冲突,这是导致包安装异常的核心原因:

  • 升级@sveltejs/vite-plugin-svelte到v4.x及以上版本,该版本已适配Svelte 5,会自动引入兼容的svelte-hmr;
  • 升级@melt-ui/svelte到v1.x及以上版本(该版本支持Svelte 5),或临时移除该依赖验证构建是否正常;
  • 在前端项目的package.json中添加overrides字段强制统一依赖版本:
    "overrides": {
      "svelte-hmr": "^0.17.0"
    }
    

2. 优化Docker构建流程

方式一:使用多阶段构建(推荐)

分离前端构建和Java环境,避免环境冲突,同时减小最终镜像体积:

# 第一阶段:前端构建
FROM node:20-bookworm-slim AS frontend-builder
WORKDIR /app/frontend
COPY learnify/frontend/package*.json ./
RUN npm ci
COPY learnify/frontend/ .
RUN npm run build

# 第二阶段:Java构建和运行
FROM openjdk:21-jdk-slim
WORKDIR /usr/src/app
COPY . .
# 复制前端构建产物到Java项目的静态资源目录(根据实际结构调整)
COPY --from=frontend-builder /app/frontend/dist ./learnify/src/main/resources/static
RUN sed -i 's/\r$//' mvnw
RUN chmod +x mvnw
RUN ./mvnw package

EXPOSE 8080
CMD ["java", "-jar", "/usr/src/app/target/learnify-0.0.1-SNAPSHOT.jar"]

方式二:修复现有Dockerfile

  • 替换npm安装方式,避免手动安装可能导致的异常:
    FROM openjdk:21-jdk-slim
    RUN apt-get update && apt-get install -y curl nodejs npm \
        && npm install -g npm@10.9.0
    
    WORKDIR /usr/src/app
    # 先复制package文件,利用Docker缓存加速依赖安装
    COPY learnify/frontend/package*.json ./learnify/frontend/
    RUN cd learnify/frontend && npm ci
    COPY . .
    RUN cd learnify/frontend && npm run build
    RUN rm -r learnify/frontend
    
    RUN sed -i 's/\r$//' mvnw
    RUN chmod +x mvnw
    RUN ./mvnw package
    
    EXPOSE 8080
    CMD ["java", "-jar", "/usr/src/app/target/learnify-0.0.1-SNAPSHOT.jar"]
    
  • 使用npm ci替代npm install,确保依赖版本与package-lock.json完全一致;
  • 优先复制package*.json再安装依赖,提升Docker构建缓存效率。

3. 验证本地依赖一致性

  • 删除本地node_modules和package-lock.json,重新执行npm install,确保本地依赖环境与Docker一致;
  • 确认package-lock.json已提交到Git仓库,避免Docker构建时依赖版本波动。

内容的提问来源于stack exchange,提问作者user28894823

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 11:00:55