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

Docker构建React-Vite项目yarn执行失败,报错exit code:1

问题:React-Vite项目Docker构建时yarn执行失败

本地可正常运行的React-Vite前端项目,用Docker构建时执行yarn命令失败,报错:

failed to solve: process "/bin/sh -c yarn" did not complete successfully: exit code: 1

尝试添加参数执行yarn install仍无效,错误根源是node-sass与Node v21.2.0版本不兼容导致编译失败。

原Dockerfile

FROM node:latest

WORKDIR /usr/src/app

COPY . .

RUN yarn
RUN yarn build

EXPOSE 3000

CMD ["yarn", "start"]

关键错误日志片段

/root/.cache/node-gyp/21.2.0/include/node/v8-local-handle.h:253:42: error: static assertion failed: type check
  253 |     static_assert(std::is_base_of<T, S>::value, "type check");
      |                                          ^~~~~
make: *** [binding.target.mk:131: Release/obj.target/binding/src/binding.o] Error 1
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
...
gyp ERR! node -v v21.2.0
gyp ERR! node-gyp -v v8.4.1
gyp ERR! not ok 
Build failed with error code: 1
------
failed to solve: process "/bin/sh -c yarn" did not complete successfully: exit code: 1
解决方案

1. 指定与node-sass兼容的Node版本

node-sass已停止维护,不同版本对应固定的Node版本范围:

  • node-sass 4.x → Node 10-14
  • node-sass 5.x → Node 12-16
  • node-sass 6.x → Node 14-16

根据项目中node-sass的版本,修改Dockerfile使用匹配的Node镜像,比如用兼容性较好的Node 16 LTS:

FROM node:16-alpine

WORKDIR /usr/src/app

# 先拷贝依赖文件,利用Docker缓存优化构建速度
COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile

COPY . .
RUN yarn build

EXPOSE 3000

CMD ["yarn", "start"]

2. 替换node-sass为dart-sass(推荐)

node-sass已废弃,官方推荐使用dart-sass(npm包名为sass),步骤如下:

  • 卸载node-sass:yarn remove node-sass
  • 安装sass:yarn add sass --dev
  • 项目中无需额外修改配置,Vite等构建工具会自动识别sass替代node-sass

替换后Dockerfile可使用最新Node LTS版本,比如node:20-alpine。

3. 多阶段构建优化镜像体积(可选)

用多阶段构建分离编译和运行环境,大幅减小最终镜像体积:

# 构建阶段:完成依赖安装和项目编译
FROM node:16-alpine AS builder
WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile
COPY . .
RUN yarn build

# 运行阶段:用nginx托管静态文件
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:35:30