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

使用Craco的React应用部署到GCP Cloud Run出现React Refresh生产包错误

报错含义

这个错误表示你的生产打包产物中错误混入了仅用于开发环境的React Refresh运行时代码。React Refresh是React生态提供的开发阶段热更新工具,作用是本地开发时修改代码后不用刷新页面就能更新UI,本身就设计为不允许出现在生产环境的代码包中,所以运行时会主动抛出这个错误。

根因说明

你本地运行正常是因为本地执行的是craco start启动的开发服务,本来就需要加载React Refresh;而部署到Cloud Run时构建过程误判了环境类型,导致构建工具把开发态的依赖也打进了生产包。

解决步骤

  • 第一步:修改Dockerfile,构建阶段显式指定生产环境变量
    修改你的Dockerfile构建段代码,添加NODE_ENV声明,避免构建工具默认读取到开发环境配置:
# build environment
FROM node:14-alpine as react-build
WORKDIR /app
COPY . ./
RUN yarn
# 新增以下行,强制指定生产环境
ENV NODE_ENV=production
RUN yarn build

# server environment
FROM nginx:alpine
COPY nginx.conf /etc/nginx/conf.d/configfile.template

COPY --from=react-build /app/build /usr/share/nginx/html

ENV PORT 8080
ENV HOST 0.0.0.0
EXPOSE 8080
CMD sh -c "envsubst '\$PORT' < /etc/nginx/conf.d/configfile.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
  • 第二步:(可选,第一步无效时执行)更新Craco配置,显式禁用生产环境热重载
    如果修改Dockerfile后问题依旧存在,说明你的Craco配置默认开启了全环境的热重载支持,更新craco.config.js如下:
const CracoAlias = require("craco-alias");

module.exports = {
  // 新增配置:仅开发环境启用React Refresh相关能力
  babel: {
    plugins: process.env.NODE_ENV === "development" ? ["react-refresh/babel"] : [],
  },
  plugins: [
    {
      plugin: CracoAlias,
      options: {
        source: "options",
        baseUrl: "./",
        aliases: {
          "@mui/styled-engine": "./node_modules/@mui/styled-engine-sc",
        },
      },
    },
  ],
};
  • 第三步:清理缓存重新部署
    GCP远程构建会默认复用历史构建缓存,你可以在部署时添加--no-cache参数禁用缓存,确保所有配置修改都能生效。

内容的提问来源于stack exchange,提问作者Bill Software Engineer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:57:05