首页 > 解决方案 > 为什么我在启动我的 React 应用程序时收到错误“[Error: std::bad_alloc]”?

问题描述

我为一个小型 React webapp 项目创建了一个全新的 Vagrant + VirtualBoxdebian/buster64虚拟机(2GB,2 核)。

配置和安装依赖项工作正常,但是当通过(脚本简写)yarn启动应用程序的客户端时,我收到以下错误:yarn start:clientparcel index.html --port 3000

[Error: std::bad_alloc]

创建一个新的虚拟机并调整内存和核心使用并没有解决问题。VirtualBox 没有显示任何问题,并且盒子内的内存使用率非常低。在尝试启动应用程序期间通过观察内存波动free -c 10显示内存在抛出错误时突然下降之前被分配。

没有提供其他错误详细信息。

包.json:

{
  "name": "",
  "version": "0.1.0",
  "description": "",
  "scripts": {
    "start": "node server/server.js",
    "start:client": "parcel index.html --port 3000",
    "start:server": "nodemon ./server/server --watch server/ --port 3001",
    "build": "parcel build index.html"
  },
  "license": "MIT",
  "engine": "14.15.3",
  "dependencies": {
    "axios": "^0.21.1",
    "axios-retry": "^3.1.9",
    "cache-all": "^2.1.1",
    "cors": "^2.8.5",
    "dayjs": "^1.10.1",
    "dotenv": "^8.2.0",
    "express": "^4.17.1",
    "gps-distance": "^0.0.4",
    "less": "^4.1.1",
    "lodash": "^4.17.20",
    "milligram": "^1.4.1",
    "nodemon": "^2.0.6",
    "ramda": "^0.27.1",
    "react": "^16.13.1",
    "react-dom": "^16.13.1",
    "react-ga": "^3.3.0",
    "react-modal": "^3.12.1",
    "react-spinners": "^0.10.4",
    "rsuite-table": "^3.14.2"
  },
  "devDependencies": {
    "@parcel/transformer-css": "^2.0.0-alpha.3",
    "@parcel/transformer-postcss": "^2.0.0-alpha.3",
    "babel-preset-nano-react-app": "^0.1.0",
    "parcel": "next",
    "sass": "^1.32.4"
  },
  "babel": {
    "presets": [
      "nano-react-app"
    ],
    "plugins": [
      [
        "@babel/plugin-proposal-class-properties",
        {
          "loose": true
        }
      ],
      [
        "@babel/plugin-transform-react-jsx",
        {
          "pragmaFrag": "React.Fragment"
        }
      ]
    ]
  }
}

标签: reactjsparceljs

解决方案


经过相当多的反复试验,我将问题追溯到 Parcel 包的缓存。

首先,我尝试自行启动应用程序的服务器 (API) 部分 ( yarn start:server),它启动时没有问题。

其次,我尝试在不指定端口号 ( node_modules/parcel/lib/bin.js index.html) 的情况下启动应用程序的客户端。该应用程序正确启动且没有问题。

第三,我再次正常启动客户端(yarn start:client),bad_alloc错误再次出现。

--no-cache第四,我用标志启动客户端。没有错误。

最后TL;DR),我删除了缓存目录(rm -fr .parcel-cache),然后像往常一样重新启动客户端。该应用程序构建正确且没有错误。

到目前为止,我已经多次重新启动客户端而没有问题。目前还不清楚 Parcel 的缓存是什么导致了这个问题。希望这可以节省某人的桌子翻转。


推荐阅读