Docker执行webpack构建无build目录,本地yarn build运行正常
问题根源
你的核心问题是webpack配置文件路径和输出路径不匹配导致的:
你将webpack.prod.config.ts存放在项目根目录下的webpack子目录中,配置里output.path写的是path.resolve(__dirname, 'build'),其中__dirname指向当前配置文件所在的目录,也就是容器内的/app/webpack/路径,所以构建完成后产物实际生成在/app/webpack/build,而非Dockerfile中指定的/app/build,因此COPY步骤找不到对应路径报错。
解决方案
方案1(最推荐):修改webpack输出路径
把webpack.prod.config.ts中的output.path配置调整为:
path: path.resolve(__dirname, '../build'),
这样构建产物就会生成到项目根目录的build文件夹下,和本地运行的预期一致,Dockerfile无需修改。
方案2:调整Dockerfile的COPY路径
如果不想改动webpack配置,可以把Dockerfile里的COPY语句改为:
COPY --from=build /app/webpack/build .
其他排查点
- 确认构建阶段没有报错:如果yarn build过程中出现TS类型错误、ESLint校验错误、依赖安装失败等问题,会导致构建提前终止,自然不会生成产物目录。你可以在Dockerfile的
RUN yarn install && yarn run build语句后临时添加RUN ls -la /app && ls -la /app/webpack,构建时查看目录结构确认产物位置。 - 锁定Node.js版本:不要使用
node:latest标签,不同时间拉取的latest版本可能存在差异,和你本地开发用的Node版本不一致也可能导致构建失败,建议换成和本地环境一致的版本,比如FROM node:18-alpine AS build,同时alpine镜像体积更小,构建速度更快。 - 检查
.dockerignore配置:确认你没有把webpack配置目录或者构建相关的依赖文件加入忽略列表,导致COPY步骤没有把必要文件传入容器。
内容的提问来源于stack exchange,提问作者William Zink
相关产品推荐
相关产品推荐

