node.js - 非常慢的 ng build --prod 在 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,但您必须将参数直接传递给节点,因此请替换
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
以查看编译不同阶段的确切时间)
推荐阅读
- c++ - 运行调试器 Visual Studio 时 argv 中的 PATH
- c# - 如何在导入到 SQL Server 数据库时删除 Excel 电子表格的顶部行
- dask - config.yaml 中 dask 分布式 pod、worker、CPU 和 RAM 之间的关系
- mysql - 删除表A中不存在表B引用且后跟表C的记录
- cmake - 如何创建库的调试和发布版本
- python - 为 pandas 中的列使用唯一值
- kubernetes - Google Cloud 部署和 Kubernetes 节点 IP 地址更改
- haskell - Haskell:如何找到用于阿特金筛子的方程的整数解的数量?
- c# - 从excel导入数据也得到空行
- lua - lua table.sort 没有正确排序