当尝试使用-aot标志在Linux服务器上构建Angular项目时,出现错误。我尝试将实例升级到更高的CPU内核,更多的RAM并打开SWAP分区,但错误仍然会更快地发生。
正在尝试从终端以及带有我使用的标志的命令进行构建。
ng build --target=production --environment=prod --aot
Your global Angular CLI version (1.7.2) is greater than your local
version (1.4.7). The local Angular CLI version is used.
To disable this warning use "ng set --global warnings.versionMismatch=false".
10% building modules 5/5 modules 0 activeTemplate parse warnings:
The <template> element is deprecated. Use <ng-template> instead ("
[WARNING ->]<template [ngIf]="!isClosed">
<div [class]="'alert alert-' + type" role="alert" [ngClass]="classes""): ng:///****************node_modules/ngx-bootstrap/alert/alert.component.d.ts.AlertComponent.html@1:0
92% chunk asset optimization
<--- Last few GCs --->
133611 ms: Mark-sweep 1302.6 (1435.2) -> 1297.8 (1435.2) MB, 1112.6 / 0.0 ms [allocation failure] [GC in old space requested].
134724 ms: Mark-sweep 1297.8 (1435.2) -> 1297.7 (1435.2) MB, 1112.7 / 0.0 ms [allocation failure] [GC in old space requested].
135854 ms: Mark-sweep 1297.7 (1435.2) -> 1302.7 (1406.2) MB, 1129.8 / 0.0 ms [last resort gc].
136983 ms: Mark-sweep 1302.7 (1406.2) -> 1307.9 (1406.2) MB, 1128.8 / 0.0 ms [last resort gc].
<--- JS stacktrace --->
==== JS stack trace =========================================
Security context: 0xb8bacacfb39 <JS Object>
1: find_variable [0xb8baca04381 <undefined>:~3539] [pc=0xbdb4151ee32] (this=0xa9144042161 <an AST_Function with map 0xd6ccb950f99>,name=0x1f852792bb29 <String[12]: DOMException>)
2: visit [0xb8baca04381 <undefined>:3449] [pc=0xbdb4151d969] (this=0x3da6d780b621 <a TreeWalker with map 0xd6ccb9394c9>,node=0x2f9919fb8e91 <an AST_SymbolRef with map 0xd6ccb9628c9>,descend=0x2e68ca83edd1 <JS Fu...
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
1: node::Abort() [ng]
2: 0x109bf8c [ng]
3: v8::Utils::ReportApiFailure(char const*, char const*) [ng]
4: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [ng]
5: v8::internal::Factory::NewInternalizedStringImpl(v8::internal::Handle<v8::internal::String>, int, unsigned int) [ng]
6: v8::internal::StringTable::LookupString(v8::internal::Isolate*, v8::internal::Handle<v8::internal::String>) [ng]
7: v8::internal::LookupIterator::PropertyOrElement(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>, bool*, v8::internal::LookupIterator::Configuration) [ng]
8: v8::internal::Runtime::GetObjectProperty(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Object>) [ng]
9: 0xed3501 [ng]
10: v8::internal::Runtime_KeyedGetProperty(int, v8::internal::Object**, v8::internal::Isolate*) [ng]
11: 0xbdb262092a7
Aborted (core dumped)
我尝试了此处提到的解决方案https://www.npmjs.com/package/increase-memory-limit 但仍然没有运气
答案 0 :(得分:2)
要生成产品,请运行以下命令:
node --max_old_space_size = 4096 node_modules / @ angular / cli / bin / ng构建 -目标生产
有关更多优化标志的信息,请在命令下方:
它具有内置的缓存清除功能和其他功能:
node --max_old_space_size = 4096 node_modules / @ angular / cli / bin / ng构建 -目标生产--build-optimizer --vendor-chunk
答案 1 :(得分:1)
尝试运行
节点--max-old-space-size = 8192
其中8192是MB大小
答案 2 :(得分:0)
这看起来不像是硬件限制问题,可以通过升级内存或处理器来解决。 我曾经有一个构建用尽了内存,但是事实证明,有一个循环引用,其中源文件A需要源文件B,然后B也需要A。这当然是代码设计问题。
我建议您先尝试一个简单的构建,然后检查它是否运行良好。
ng build
此外,Angular文档还提到使用ng build --prod
(而不是--target=production
)时,它会执行AOT编译,以及其他功能:
https://angular.io/guide/deployment
-prod元标记具有以下优化功能。
提前(AOT)编译:预编译Angular组件模板。
生产模式:部署启用生产模式的生产环境。
您可能想安装最新版本的Angular CLI,看看是否有帮助。
答案 3 :(得分:0)
按照Filipe Silva在angular-cli repository中的建议,在scripts
文件的package.json
部分中添加一个新条目:
"ng-high-memory": "node --max_old_space_size=8000 ./node_modules/@angular/cli/bin/ng",
并以这种方式使用它:
npm run ng-high-memory --
您必须记住在参数前使用双破折号,否则可能无法正确解析它们:
npm run ng-high-memory -- serve
答案 4 :(得分:0)
我在 Angular 4 项目中遇到了同样的问题。问题是我的 Node Js 版本与 Angular 4 不兼容,我安装了 Node Js v6.17.1 并为我解决了问题。
有关 Angular 和 Node Js 兼容性的更多详细信息,您可以访问此链接:Is there a compatibility list for Angular / Angular-CLI and Node.js?