我的環境: win10環境 node.js版本 12+ 內存16G
今天系統升級時通過運行npm run build:prod命令(或npm run build)打包時一直報錯:
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
因為我是從后台剛轉到前端,雖然知道是內存溢出要把內存配置改大點,從網上搜的答案還是踩坑了:
-
刪除 C:\Users{賬戶}\下的.npmrc文件我刪了,沒看出有啥變化,依然報錯(重啟了,清緩存了) -
全局安裝 increase-memory-limit插件
這個安裝上以后運行打包命令直接報錯了,報錯信息為
'"node --max-old-space-size=4096"'不是內部或外部命令,也不是可運行的程序
這里不是內存設置太大,而是因為win10系統命令行中不能正確識別雙引號"",因此還要把這個插件包中涉及到的腳本中雙引號都去掉,即修改node_modules下的.bin文件中的所有.cmd文件,將里面的"%_prog%" 去掉雙引號 改成 %_prog%
項目中依賴的模塊那么多,就算可以批量替換,但代碼改動越多,風險越大,想想太麻煩了,所以再想想辦法吧! -
修改package.json文件中build命令處
"build": "node --max_old_space_size=4096 build/build.js"
我的項目使用vue-cli搭建的,不是引用上述build/build.js這種寫法,而是下面寫法:
"build:prod": "vue-cli-service build"
最終針對我的有效方案,上面那行代碼改為:
"build:prod": "node --max_old_space_size=4096 node_modules/@vue/cli-service/bin/vue-cli-service.js build"
改完之后運行 npm run build打包沒問題了,但是npm run serve 報了'"node --max-old-space-size=4096"'不是內部或外部命令,也不是可運行的程序,要不就用vscode將項目下所有.cmd文件里面的"%_prog%"雙引號去掉,要不就將package.json里面的serve命令也改成build命令里面的格式
"serve": "node --max_old_space_size=4096 node_modules/@vue/cli-service/bin/vue-cli-service.js serve --open",
