報錯信息很直觀地指出是內存溢出了。是什么導致了內存溢出呢?其根本原因在于 nodejs 默認限制了最大可使用的內存大小。
nodejs V8 引擎在 64 位機器上默認限制使用內存最大不超過 1.7GB,超過這個限制官方建議嘗試優化為多線程方式。
解決辦法可以是增加 nodejs 可使用的最大內存大小,也可以從降低程序內存消耗的角度入手。
解決辦法一: 設置 nodejs 配置項 配置項
max_old_space_size
如果希望超越 V8 引擎默認的內存大小限制,可以通過設置配置項 max_old_space_size
來解決。
- 方法一:設置環境變量
NODE_OPTIONS
示例:
# windows
set NODE_OPTIONS=--max_old_space_size=4096
# mac/linux
export NODE_OPTIONS=--max_old_space_size=4096
- 方法二:在運行命令中增加 --max_old_space_size=4096
例如可以修改 package.json 的 scripts 腳本,示例如下:
{
"scripts": {
"serve": "node --max_old_space_size=8000 ./node_modules/@angular/cli/bin/ng serve",
"prod": "node --max_old_space_size=8000 ./node_modules/@angular/cli/bin/ng build --prod",
}
}
解決辦法二:項目構建流程關閉 sourcemap 生成
以 Angular 為例,對于越來越龐大的 Angular 項目,Angular 編譯時間、內存消耗也越來越長,其中 sourceMap
的生成占據了絕大部分的時間。
在開發過程中可以關閉 sourceMap
的生成,加快編譯構建的速度。方法為在 angular.json
中設置 build.options.sourceMap
的值為 false
,同時在 tsconfig.json
中設置 compilerOptions.sourceMap
的值為 false
。