在做项目时,随着需求的不断增加,我们的代码文件会越来越大,但是在打包时,在 Node 中通过 JavaScript 使用内存的大小却是有限制的。于是,今天打算部署代码时,报错了:
<--- JS stacktrace --->
==== JS stack trace =========================================
0: ExitFrame [pc: 00007FF69790ABBD]
Security context: 0x01e6a86408d1
1: decode(aka decode) [000002AD02F874D1] [E:\vite-template\[email protected]@rollup\dist\shared\rollup.js:~133] [pc=0000039464A55451](this=0x037824a004b1 ,0x017863480119 <Very long string[1502653]>)
2: decodedSourcemap(aka decodedSourcemap) [000002AD02F8A979] [E:\vite-template\[email protected]@rollup\dist\shared\roll...
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
解决方案
node --max_old_space_size=1024000 ./node_modules/vite/bin/vite.js build
在网上找了以下解决方案:
- 升级node版本(未尝试:非必要,不升级,免得带来不兼容问题)
- 修改vite.config.ts里面的配置项:
sourcemap: false
。但是有时我们可能想在部署到dev环境里进行调试(有些场景在部署后才能发现),那关闭了sourcemap,就无法在部署环境进行调试了,也不推荐。 - 找了段修改的实例(并不起作用,cross-env找不到,即使安装了也没起作用,不知为何):
"scripts": {
"dev": "vite",
"build": "cross-env NODE_OPTIONS=--max_old_space_size=1024000 vite build",
"preview": "vite preview"
}
// 改进版也不起作用
"build": "set NODE_OPTIONS= --max_old_space_size=10240 && vite build",
- vite下面的issue讨论里面发现了点线索,如下(亲测可用):
node --max_old_space_size=1024000 ./node_modules/vite/bin/vite.js build
https://github.com/vitejs/vite/issues/2433#issuecomment-792914871
https://github.com/vitejs/vite/issues/2433#issuecomment-1159005523
既然原因找到了(node 中使用内存受限),自己的问题也解决了(放宽该限制),探索到此为止。
参考地址:https://github.com/vitejs/vite/issues/2433