Docker部署React应用报错:sh: react-scripts: not found
Docker化React应用启动报错:
sh: react-scripts: not found 解决方案 问题根源
构建容器成功但启动时找不到react-scripts,核心原因是本地目录挂载覆盖了容器内的依赖文件:
你在docker-compose.yml中配置了- .:/app,将本地项目目录直接挂载到容器的/app目录。容器构建阶段安装的node_modules会被本地目录覆盖,如果本地未安装依赖(没有node_modules文件夹),启动时自然找不到react-scripts。
解决方案
方案1:保留容器内的node_modules(推荐)
修改docker-compose.yml的volumes配置,添加匿名卷排除node_modules,避免本地目录覆盖容器内的依赖:
services: tmf-dev: # ... 其他配置不变 volumes: - .:/app - /app/node_modules # 新增:保留容器内的node_modules
方案2:本地预先安装依赖
在本地项目根目录执行以下命令,确保本地存在node_modules:
npm install
之后再运行docker-compose up,挂载后本地的node_modules会被带入容器,即可找到react-scripts。但此方法依赖本地Node环境,不如方案1灵活。
方案3:优化开发环境Dockerfile
开发环境无需提前执行build,简化docker/Dockerfile.dev,确保构建时完成依赖安装:
FROM node:18.13.0-alpine WORKDIR /app COPY package.json package-lock.json ./ RUN npm install -g npm@9.8.0 && npm install # 直接安装依赖 COPY . ./ EXPOSE 3000 CMD ["npm","run","start"]
配合方案1的volumes配置,既能实现代码热更新,又能保证依赖正常加载。
内容的提问来源于stack exchange,提问作者ashraf shahadat
相关产品推荐
相关产品推荐

