分配失败 - 当 ng serve 时,Angular 11 中的 JavaScript 堆内存不足

Posted

技术标签:

【中文标题】分配失败 - 当 ng serve 时,Angular 11 中的 JavaScript 堆内存不足【英文标题】:Allocation failed - JavaScript heap out of memory in Angular 11 while ng serve 【发布时间】:2021-08-17 06:50:18 【问题描述】:
    我已将 Angular 版本从 5.2 升级到 11.2 在升级 Angular 和所有库后,当我启动服务器 (ng serve) 得到 分配失败 - JavaScript 堆内存不足 它还会生成 1 个包含信息的文件,但我没有得到

你能帮我解决这个问题吗?

    Angular 版本和详细信息

【问题讨论】:

这取决于您的 PC 内存大小,您可以将其添加到您的 package.json 文件中: ... "start": "node --max_old_space_size=8000 ./node_modules/@angular/cli/bin/ng serve", .. @sohaiebazaiez 我已经尝试过,但出现多个错误 "export 'DOCUMENT' (imported as 'i28') was not found in '@angular/platform-b​​rowser' 更新的时候,通常最好是更新版本,一个一个... @StPaulis 是的,我已经一一升级了所有库并解决了所有问题,但是当我尝试编译时,它会出现 javascript heap out of memory 错误 @Chaudhary 看起来你有 2 个问题:一个你通过添加 --max_old_space_size 解决的内存错误和很多由 export 'DOCUMENT' 引起的错误 【参考方案1】:

设置环境变量:

SET NODE_OPTIONS=--max_old_space_size=8048

【讨论】:

设置后我得到一些 DOCUMENT 错误,我最后添加了屏幕截图,并且我将 DOCUMENT 移动到@angular/common,但我仍然收到错误【参考方案2】:

您可以为构建/启动任务分配更多内存以进行编译:

node --max_old_space_size=4096 ./node_modules/.bin/ng build

并且,根据对这个问题的回答:"export 'DOCUMENT' was not found in '@angular/platform-browser',DOCUMENT 已移至 @angular/common。因此,您还必须更改导入才能编译代码。

【讨论】:

当我设置 node --max_old_space_size=6144 ./node_modules/@angular/cli/bin/ng serve 时,我启动了我的服务器但得到了编译错误,这来自.ngFctory 文件,并且我已经从 @angular/common 导入 DOCUMENT 我添加了DOCUMENT错误的截图,请查看。【参考方案3】:

我发现这个错误来自源映射的生成。禁用源映射将使错误消失。

由于大部分都需要source maps,所以在npm脚本中使用增加内存的解决方案而不是禁用source maps,就可以解决了。

示例:

scripts: 
  "build": "node --max_old_space_size=6000 ./node_modules/@angular/cli/bin/ng build",
  "serve": "node --max_old_space_size=6000 ./node_modules/@angular/cli/bin/ng serve"

【讨论】:

以上是关于分配失败 - 当 ng serve 时,Angular 11 中的 JavaScript 堆内存不足的主要内容,如果未能解决你的问题,请参考以下文章

手动重启 `ng build --watch` 或 `ng serve`

“ng e2e”可能因代理而失败,但“ng serve”和“ng test”正在运行

当同时运行 ng build --watch 和 ng serve 时,Angular 7 库 html-template 更改不会影响到应用程序

使用 ng2-pdf-viewer 时 ng-serve 出错

运行 ng serve 命令时“端口 4200 已在使用中”

如何在使用ng build而不是ng serve时运行webpack?