天天看點

webpack:CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory

最近用webpack熱附加元件目時經常挂掉,并報

95% emittingFATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
           

此類錯誤,網上查了下,這是由于編譯的時間記憶體洩漏,因為前端項目如果非常的龐大,webpack 編譯時就會占用很多的系統資源,如果超出了V8對 Node 預設的記憶體限制大小就會出現這個錯誤了;解決辦法是我們在Node 在啟動時可以傳遞 --max-old-space-size 或 --max-new-space-size 來調整記憶體大小的使用限制;

node --max-old-space-size=2048
node --max-new-space-size=2048 來調整記憶體大小的使用限制
           

知道解決辦法之後趕緊動手撸碼,打開package.json 中加入;但是我一打開我的package.json傻眼了,因為是用vue-cli生成的項目,運作開發環境指令中沒有node?

"scripts": {
    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
    "start": "npm run dev",
    "build": "node build/build.js"
  },
           

因為webpack自己幫我們封裝了 npm run dev的方法,網上大神解決了我的困惑;

1、打開node_modules檔案夾,就是安裝node依賴包的這個檔案夾;

2、打開.bin檔案夾

3.找到webpack-dev-server.cmd;這個檔案并用編輯器打開;打開後我的如下:

@IF EXIST "%~dp0\node.exe" (
  "%~dp0\node.exe"  "%~dp0\..\[email protected]@webpack-dev-server\bin\webpack-dev-server.js" %*
) ELSE (
  @SETLOCAL
  @SET PATHEXT=%PATHEXT:;.JS;=;%
  node "%~dp0\..\_webpack-dev-[email protected]@webpack-dev-server\bin\webpack-dev-server.js" %*
)
           

這裡就有dev環境的node運作指令了,我們隻要在倒數第二行node後面加上上文提到的代碼就ok了;注意空格;

@IF EXIST "%~dp0\node.exe" (
  "%~dp0\node.exe"  "%~dp0\..\[email protected]@webpack-dev-server\bin\webpack-dev-server.js" %*
) ELSE (
  @SETLOCAL
  @SET PATHEXT=%PATHEXT:;.JS;=;%
  node  --max-old-space-size=4096  "%~dp0\..\_webpack-dev-[email protected]@webpack-dev-server\bin\webpack-dev-server.js" %*
)
           

完事