非常慢的ng build-Docker中的prod

时间:2019-04-19 07:12:31

标签: node.js angular docker angular-cli-v6

当我尝试在docker中构建angular7项目时,大约需要40分钟。需要40分钟的线路是

ng build --prod

92%的块资产优化TerserPlugin

我已经在同一台笔记本电脑上的docker外部运行build --prod,需要2分钟。

我尝试添加--build-optimizer false

和--sourceMap = false

没什么区别

这是我的Dockerfile

FROM node:carbon
WORKDIR /usr/src/app
COPY package.json package-lock.json ./
RUN npm install
RUN npm install -g @angular/cli@6.1.0
COPY . .
RUN ng build --prod
EXPOSE 4200
CMD [ "npm", "start" ]
HEALTHCHECK --interval=5s --timeout=30s --retries=20 CMD curl --fail http://localhost:4200 || exit 1

2 个答案:

答案 0 :(得分:6)

此构建速度极慢的问题几乎总是与缺少内存的构建过程有关。

节点不会为单个进程分配大量内存(在32位系统上为512mb,在64位系统上为1gb),但是在生产设置下运行ng build会占用大量内存。

您可以使用节点参数max_old_space_size来设置允许进程使用多少RAM,但是必须将参数直接传递给节点,以便进行替换

ng build --prod

使用

node --max_old_space_size=8192 ./node_modules/@angular/cli/bin/ng build --prod

它将为该进程分配最多8GB的RAM,这将使其运行更快。

您还可以将其添加到package.json中的脚本中:

"scripts": {
  ....
  "build:prod": "node --max_old_space_size=4096 ./node_modules/@angular/cli/bin/ng build --prod"
 }

如果无法增加内存限制,请尝试运行ng build --prod --verbose来查看编译不同阶段的确切时间

答案 1 :(得分:0)

就像丹尼尔在回答中提到的那样,您可以使用节点参数--max_old_space_size,但我更喜欢通过环境var来设置它:

NODE_OPTIONS=--max-old-space-size=4096