首页 > 解决方案 > 致命错误:CALL_AND_RETRY_LAST 分配失败 - JavaScript 在生产中堆内存不足

问题描述

从上周开始,我大部分时间都在生产中FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory

我试图增加 HEAP 的大小,但没有奏效。由于它发生在生产中,因此无法继续使用它,因此它下降了一段时间。我在 Laravel 应用程序中使用 Vuejs 和 .less。

我在 package.json 中的脚本如下所示:

"scripts": {
    "start": "npm run watch",
    "dev": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
    "watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
    "watch-poll": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --watch-poll --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
    "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
    "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
},

NPM 版本是4.6.1 NODE 版本是8.16

我在开发中没有遇到这个错误,但我尝试了一些开发和生产中的解决方案。

我尝试添加一个 npm 包

`npm install -g increase-memory-limit` 

接着

`increase-memory-limit` 

但是当我执行npm run devor时npm run watch,模块没有编译。这个过程卡住了很长时间,什么也没发生。

我也尝试在生产中添加以下脚本: "scripts": { "fix-memory-limit": "cross-env LIMIT=2048 increase-memory-limit" }, "devDependencies": { "increase-memory-limit": "^1.0.3", "cross-env": "^5.0.5" }

但它也没有奏效。包坏了,最后不得不删除代码。

来源在这里

我还尝试在开发中使用以下脚本:

"dev": "cross-env NODE_OPTIONS=\"--max-old-space-size=4096\" NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"

我没有收到任何错误,但我不确定它是否会在生产中工作。这是正确的做法吗?

或类似的东西:

npm run dev NODE_OPTIONS="--max-old-space-size=4096"

在生产中不能采取更多的机会,已经有 2、3 次失败。

有人可以建议一个更好的方法,我如何检查 HEAP 大小是否增加。

标签: node.jsvue.jsnpm

解决方案


我有同样的问题,我解决了,必须<div><template>vue 文件中


推荐阅读