Angular项目Docker执行ng build生产构建报ModuleConcatenation bailout错误
Angular Docker构建ModuleConcatenation报错解决方案
这个报错是webpack的作用域提升优化(ModuleConcatenationPlugin)阶段无法合并@angular/animations模块导致的,即便本地和Docker的Angular CLI版本一致,仍可能因为依赖版本解析差异、环境不匹配触发问题,可按以下步骤排查解决:
- 修正依赖版本不匹配问题
你当前package.json中@angular/material-moment-adapter版本为^8.0.0,和其余Angular 5.x核心包跨大版本,是核心冲突来源。请将该包降级为对应Angular 5的5.x版本,同时将所有Angular相关依赖的版本前缀^删除,固定为具体版本,避免Docker安装依赖时自动拉取更高兼容版本导致冲突。 - 校验构建参数兼容性
可先临时去掉构建命令中的--build-optimizer参数测试,如果构建正常,说明你使用的@angular-devkit/build-optimizer@0.3.2版本与@angular/animations的ES2015模块格式不兼容,可升级build-optimizer到适配Angular 5的最新小版本,或在Angular构建配置中添加@angular/animations为build-optimizer的排除项。 - 对齐Node.js环境版本
Angular 5.x要求Node.js版本为8.x/9.x,若Docker基础镜像使用了12.x及以上的高版本Node.js,会导致依赖解析逻辑和本地不一致,请将Dockerfile中的Node基础镜像替换为和本地环境完全一致的版本。 - 优化Docker构建流程
不要将ng build放在docker run阶段执行,应将构建逻辑写入Dockerfile的构建阶段,同时将本地的package-lock.json或yarn.lock文件一同复制到镜像内再执行npm install,保证依赖安装版本和本地完全一致,构建完成后直接将静态产物托管到Nginx等静态服务镜像中运行即可。
内容的提问来源于stack exchange,提问作者Rakesh Joshi
相关产品推荐
相关产品推荐

