簡體   English   中英

Docker 中的 ng build --prod 非常慢

[英]Very Slow ng build --prod in Docker

當我嘗試在 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

這個構建速度極慢的問題幾乎總是與構建過程內存不足有關。

Node 不會為單個進程分配大量內存(在 32 位系統上為 512mb,在 64 位系統上為 1gb),但是使用生產設置運行ng build會使用大量內存。

您可以使用 Node 參數max_old_space_size來設置允許進程使用多少 RAM,但是您必須將參數直接傳遞給 node 所以替換

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以查看編譯不同階段的確切時間

正如 Daniel 在回答中提到的,您可以使用節點參數--max_old_space_size但我更喜歡通過環境變量進行設置:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM