Docker 中的 ng build --prod 非常慢
Very Slow ng build --prod in Docker
当我尝试在 docker 中构建一个 angular7 项目时,大约需要 40 分钟。耗时40分钟的线路是
ng 构建 --prod
92% 区块资产优化 TerserPlugin
我在同一台笔记本电脑上 运行 ng build --prod outside docker 需要 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),但是 运行ning 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
当我尝试在 docker 中构建一个 angular7 项目时,大约需要 40 分钟。耗时40分钟的线路是
ng 构建 --prod
92% 区块资产优化 TerserPlugin
我在同一台笔记本电脑上 运行 ng build --prod outside docker 需要 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),但是 运行ning 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