当我使用该命令运行 Ionic 3 项目ionic serve
时,我收到此错误:
40 回答
对于那些从 Google 提出这个问题的人的非 Angular 一般答案:
每次遇到此错误时,可能是由于内存泄漏或 Node.js <= 10 和 Node.js > 10 管理内存的方式之间存在差异。
通常只是增加分配给 Node.js 的内存将允许您的程序运行,但可能无法真正解决真正的问题,节点进程使用的内存仍可能超过您分配的新内存。我建议在 Node.js 进程开始运行或更新到 Node.js > 10 时分析内存使用情况。
我有内存泄漏。这是一篇关于在 Node.js 中调试内存泄漏的好文章。
也就是说,为了增加内存,在运行 Node.js 进程的终端中:
export NODE_OPTIONS="--max-old-space-size=8192"
其中的值max-old-space-size
可以是:[2048, 4096, 8192, 16384]
等
更多示例以进一步说明:
export NODE_OPTIONS="--max-old-space-size=5120" # Increase to 5 GB
export NODE_OPTIONS="--max-old-space-size=6144" # Increase to 6 GB
export NODE_OPTIONS="--max-old-space-size=7168" # Increase to 7 GB
export NODE_OPTIONS="--max-old-space-size=8192" # Increase to 8 GB
# and so on...
# formula:
export NODE_OPTIONS="--max-old-space-size=(X * 1024)" # Increase to X GB
# Note: it doesn't have to be multiples of 1024.
# max-old-space-size can be any number of memory megabytes (MB) you have available.
查看 max-old-space-size 的当前值(以 MB 为单位)
要查看 max-old-space-size(以 MB 为单位)的当前(不准确但非常接近)值,请在终端中运行
node -e 'console.log(v8.getHeapStatistics().heap_size_limit/(1024*1024))'
就我而言,我通过安装 Node.js 版本 12.10.0 解决了这个问题。
我在CentOS服务器 7上遇到了同样的问题,但这解决了我的问题:
node --max-old-space-size=X node_modules/@angular/cli/bin/ng build --prod
X = (2048 or 4096 or 8192 o..)
内存的价值在哪里。
只需在终端中输入:
export NODE_OPTIONS="--max-old-space-size=8192"
当您超过 Node.js 允许的默认最大内存时会发生错误。所有这一切都是增加允许的最大内存。
ng build
在 Visual Studio Code 中执行命令时出现同样的错误。但是当我按以下顺序在 Windows 命令行上执行相同的操作时,我可以成功构建。
步骤1。
set NODE_OPTIONS=--max_old_space_size=4096
第2步。
ng build
试试论坛上一条旧消息中指出的解决方案:3.7.0: iOS build with --prod not working
打开node_modules/@ionic/app-scripts/bin/ionic-app-scripts.js
将第一行从:
#!/usr/bin/env node
至
#!/usr/bin/env node --max-old-space-size=4096
尝试值 1024 和 2048,但对于相对较大的应用程序,您可能需要 4096。
就我而言,这是一个递归导致 React 耗尽了所有内存。
这发生在我重构代码并且没有注意到这一点时。
const SumComponent = () => {
return (
<>
<SumComponent />
</>
)
}
在其他 Node.js 应用程序中,这可能如下所示:
const someFunction = () => {
...
someFunction();
...
}
从 Node.js 12 更新到 Node.js 14 为我解决了这个问题。
立即更新
Node.js 16 可用,我建议更新到可用的最新 Node.js 版本。
在 Visual Studio Code 中执行以下语句时,我收到了相同的错误消息。但是当我在 Windows 命令行上执行相同的操作时,我可以成功构建。
npm install -g increase-memory-limit
increase-memory-limit
set NODE_OPTIONS=--max_old_space_size=4096
ng build -c deploy --build-optimizer --aot --prod --sourceMap
由于某些原因,以前的所有答案都对我不起作用。我做了以下事情来解决我的问题:
- 我必须先删除
node_modules
文件夹 - 在我的电脑上重新安装 Node.js 并
- 然后
npm install
node --max_old_space_size=4096 node_modules/@angular/cli/bin/ng build --baseHref=/baseUrl/ --prod=true
添加参数--build-optimizer
解决了我的问题:
node --max_old_space_size=4096 ./node_modules/@angular/cli/bin/ng build --prod --build-optimizer
我不确定为什么只添加 --build-optimizer 可以解决问题,但根据 Angular 文档,它应该与启用提前 (AOT) 编译一起使用,因此更新后的命令应如下所示:
--build-optimizer=true --aot=true
换行
"start": "ng serve -o --port 4300 --configuration=en"
和
"start": "node --max_old_space_size=5096 node_modules/@angular/cli/bin/ng serve -o --port 4300 --configuration=en"
笔记:
port--4300 不是恒定的,取决于您选择的端口。
--max_old_space_size=5096 太不恒定;任何值 1024,2048,4096 等
对我来说,我有一个语法错误(没有出现)并导致了这个错误。
在您的项目文件夹中运行此命令。使用服务而不是构建
node --max_old_space_size=8000 node_modules/@angular/cli/bin/ng serve --prod --port=4202
我没有使用ng build
,而是在终端中执行了以下命令来解决此问题。
node --max_old_space_size=8192 ./node_modules/@angular/cli/bin/ng build --prod
然后做ng serve
。
这就是我的终端的样子
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
Try the new cross-platform PowerShell https://aka.ms/pscore6
PS D:\ProjectPath\Project1> node --max_old_space_size=8192 ./node_modules/@angular/cli/bin/ng build --prod
我在 Angular 上遇到了同样的问题。然后我写了
"serve": "node --max_old_space_size=8192 ./node_modules/@angular/cli/bin/ng serve"
这个脚本到package.json
脚本,对我来说这个问题解决了。
并运行项目这个命令:
npm run serve
对我来说,这是一个 Firebase 包的问题。
仅为您的package.json文件添加 "@firebase/database": "0.2.1" 。重新安装node_modules并且它可以工作。
请检查您的 Node.js 版本:
node -v
如果它是 10.1.1 的东西,那么您需要通过以下命令更新您的根级别 Node.js 版本:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
source ~/.nvm/nvm.sh
nvm ls
nvm install 12.18.1
完成后,请重新启动终端或 Visual Studio。
它工作 100 美元。
对于 Ionic 用户,请在您的 package.json 中添加以下代码
"ionic:build": "node --max-old-space-size=16384 ./node_modules/@ionic/app-scripts/bin/ionic-app-scripts.js build",
只需运行以下命令:
export NODE_OPTIONS="--max-old-space-size=8192"
另一个非 Angular 答案(我在 AWS Amplify 上构建 React 应用程序时遇到了同样的问题)。
正如 Emmanuel 所提到的,它似乎来自 Node.js v10 与 Node.js v12 处理内存的方式不同。
我试图增加内存无济于事。但是使用 Node.js v12 做到了。
检查如何按照 Richard 的解释nvm use $VERSION_NODE_12
添加到构建设置
frontend: phases: preBuild: commands: - nvm use $VERSION_NODE_12 - npm ci build: commands: - nvm use $VERSION_NODE_12 - node -v - npm run-script build
对我来说,问题是有一个额外的node_modules
文件夹,我将其重命名为node_modules_old
并运行 annpm install
以生成新的node_modules
. 不知何故,构建必须仍在拾取node_modules_old
文件夹,所以我移出node_modules_old
目录以解决问题。
对于那些从 Google 提出这个问题并希望在您的Dockerfile
(替换6144
为您要分配的以兆字节为单位的内存量)中解决此问题的人的非 Angular 通用 JavaScript 答案。
我的实现在 Node.js v14.1.0 中工作,由 Docker 版本 20.10.5 执行,使用气流 v2.0.1 构建DockerOperator
55c4c88 )。
FROM node:14.1.0
# Create app directory
WORKDIR /tmp/dockerspace/
# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
COPY package*.json ./
RUN npm install
# Bundle app source
COPY . .
CMD node --max-old-space-size=6144 app.js
我删除了现有的 Node.js 模块并运行以下命令来解决我的问题:
npm install -all
npm audit fix
运行此命令:
export NODE_OPTIONS="--max-old-space-size=2048"
要检查您已经拥有多少:
> node
> v8.getHeapStatistics()
{
total_heap_size: 6049792,
total_heap_size_executable: 524288,
total_physical_size: 5477720,
total_available_size: 1094444024,
used_heap_size: 4141728,
heap_size_limit: 1098907648,
malloced_memory: 8192,
peak_malloced_memory: 582752,
does_zap_garbage: 0,
number_of_native_contexts: 2,
number_of_detached_contexts: 0
}
接着heap_size_limit: 1098907648
- export NODE_OPTIONS="--max-old-space-size=6144" #它将增加到6gb。
--------如果未解决,请尝试第二步------------- 2)只需将您的节点版本更新到最新版本即可解决此问题。
--------如果未解决,请尝试第三步---------------- 3)只需在 Windows 终端中运行此命令。
set NODE_OPTIONS=--max_old_space_size=4096
如果您是在 Windows 上开发并在发布时遇到此问题,请通过官方站点升级 Node.js。
内存使用处理确实随着 Node.js 的每个更新版本而增加,尽管我没有找到关于增加的确切数字。
那是唯一对我有用的解决方案。我花了一个周末甚至更多的时间来解决这个问题。
对我来说,我收到了这个错误,因为我无法访问我的 angular.json 文件中设置的 dist 文件夹的输出路径。在我使用更新的凭据重新连接到远程路径后,错误消失了。
for ...
在我的情况下,错误是由于循环中的条件使用不当引起的。代替:
for (let t = startNo; t <= endNo; t++) {}
我有:
for (let t = startNo; endNo; t++) {}
如果在 Visual Studio Code 中运行 React 应用程序时发生这种情况,请检查您的 propTypes,未定义的 Proptypes 会导致同样的问题。
我想有很多方法可以解决这个错误!
在我这边,我的package.json
. 项目 A 依赖于项目 B,而项目 B 又依赖于项目 A。
检查您的文件夹名称。如果您的文件夹名称中有空格,则会产生此类问题。重命名不带空格。
当我运行 angular 'ng serve' 时,我遇到了类似的问题:
“致命错误:堆限制附近的无效标记压缩分配失败 - JavaScript 堆内存不足”
就我而言,我发现我的 Angular 应用程序使用了延迟加载。一个模块已经被导入到它自己的路由模块中,但是有人也将它导入到应用程序模块中,这导致了递归(?)加载。
这会导致内存不足。
我正在使用 Node.js v-14.17 的最新稳定版本。我在新的 Angular Ionic 项目中遇到了同样的问题,并且尝试了大多数以前的答案,但没有成功。
最后在升级到 Node.js 16.4.2 LTS 后,它修复了这个问题。
在安装 aws-sdk 之后,我遇到了同样的问题,而不是内存空间。我解决了将导入更改为要求的问题,如下所示:
在我为我的项目更新了 Node.js、TypeScript、Yarn、npm 等所有库后,这个问题就消失了。
#!/usr/bin/env node --max-old-space-size=4096
在ionic-app-scripts.js文件中不起作用。
通过添加修改node_modules/.bin/ionic-app-scripts.cmd
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\..\@ionic\app-scripts\bin\ionic-app-scripts.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node --max_old_space_size=4096 "%~dp0\..\@ionic\app-scripts\bin\ionic-app-scripts.js" %*
)
终于奏效了。
有时简单是成功的关键。while (i <= 10000) {}
在不增加代码的情况下进行搜索i
;)