【问题标题】:Very Slow ng build --prod in Docker非常慢的 ng build --prod 在 Docker
【发布时间】:2019-09-09 11:53:54
【问题描述】:

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

ng build --prod

92% 块资产优化 TerserPlugin

我在同一台笔记本电脑上在 docker 外部运行了 ng 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-3分钟
  • 为什么不在运行 docker build 之前构建 Angular 应用程序>
  • 你有 docker 日志吗?
  • @wentjun 在主机中构建然后复制内容可能不是一个好主意。
  • 我很困惑...为什么要使用 Angular 6.1.0 cli?我认为构建问题已在较新的 cli 版本 6795 中得到解决

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


【解决方案1】:

正如丹尼尔在回答中提到的,您可以使用节点参数--max_old_space_size,但我更喜欢通过环境变量进行设置:

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

【讨论】:

  • 不适用于 docker :(
  • @JRichardsz 在你的 package.json 中以这种方式将它传递给节点: "start": "export NODE_OPTIONS=\"--openssl-legacy-provider --max-old-space-size=8192 \"; ng 服务 --host 0.0.0.0"
  • 谢谢@grantwparks 我会试试的!
【解决方案2】:

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

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

您可以使用Node参数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 以查看编译不同阶段的确切时间

【讨论】:

  • 这是一篇不错的文章(角度不可知论,只是关于 nodejs)developer.ibm.com/articles/…
  • 如果你在 Mac 上,别忘了增加 Docker 的内存限制。
  • 不适用于 docker :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-04
  • 2018-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多