內存溢出,打包失敗CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory

1、vue項目打包,內存溢出報錯

報錯描述
CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory(內存溢出)
在這裏插入圖片描述
原因分析
報錯中有句關鍵的話,CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory JavaScript堆內存不足,這裏說的 JavaScript 其實就是 Node,我們都知道 Node 是基於V8引擎,在一般的後端開發語言中,在基本的內存使用上沒有什麼限制,但是在 Node 中通過 JavaScript 使用內存時只能使用部分內存(64位系統下約爲1.4 GB,32位系統下約爲0.7 GB),這就是我們編譯項目時爲什麼會出現內存泄露了,因爲前端項目如果非常的龐大,webpack 編譯時就會佔用很多的系統資源如果超出了V8對 Node 默認的內存限制大小就會出現剛剛我截圖的那個錯誤了

解決方法

傳遞 --max-old-space-size 來調整內存大小的使用限制

vue直接在package.json中的命令中的 node 後面寫上 – --max_old_space_size=4096 就好了,我這裏設置的內存大小是4G,這個具體的大小可以根據自己的項目情況來設置就好了。

"build": "node --max_old_space_size=4096 build/build.js"

至於說React和Angular如何添加,請參考
https://segmentfault.com/a/1190000010437948

2、vue運行項目(npm run dev),熱更新時內存溢出導致項目運行失敗

解決方法一 在node_modules中的webpack-dev-server.cmd中添加max-old-space-size
windows 下的 vue 項目可以找到以下路徑

./node_modules/.bin/webpack-dev-server.cmd

添加 --max-old-space-size=4096

@SETLOCAL

@IF EXIST "%~dp0\node.exe" (
  @SET "_prog=%~dp0\node.exe"
) ELSE (
  @SET "_prog=node"
  @SET PATHEXT=%PATHEXT:;.JS;=;%
)

"%_prog%" --max-old-space-size=4096  "%~dp0\..\[email protected]@webpack-dev-server\bin\webpack-dev-server.js" %*
@ENDLOCAL

解決方法二 修改package.json中的scripts中的dev命令(本質也是添加max-old-space-size)

"dev":"node --max_old_space_size=4096 node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --progress --config build/webpack.dev.conf.js",

參考鏈接一
https://blog.csdn.net/liub37/article/details/82866763?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-17&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-17
參考鏈接二
https://segmentfault.com/a/1190000010437948

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章