大家好!今天跟大家分享一下我最近部署 Next.js 应用的“心酸”历程,堪称一部跨平台的血泪史。故事的主角,除了我之外,还有我的老伙计——一台可怜的 2GB 内存的 CentOS 9 服务器。
环境信息
- 操作系统:CentOS 9 (Linux x64,2H2G)
- Node.js 版本:20.x
- npm 版本:10.x
- next: 12.x
- react: 17.x
坑一:依赖包大迁徙之殇
一开始,我天真地以为,把 Windows 下好好的 node_modules 文件夹直接复制到 Linux 服务器上就能运行,这就好比把南方的大闸蟹空运到北方,指望它还能活蹦乱跳一样。结果,服务器毫不留情地给了我一记响亮的耳光:
Failed to load SWC binary for linux/x64
翻译成人话就是:“你小子拿 Windows 的东西糊弄我?Linux x64 架构可不是吃素的!”
好吧,我认怂。乖乖地删掉 node_modules,重新 npm install。世界终于清静了……(此处应有心累的表情)。
坑二:内存告急!编译时的生死时速
本以为解决了依赖问题就万事大吉,没想到更大的挑战还在后面。编译开始后,我的 2GB 内存小服务器开始发出痛苦的呻吟,CPU 占用率飙升,风扇狂转,仿佛下一秒就要原地爆炸。
终端里也开始疯狂输出类似这样的天书:
<--- Last few GCs ---> [62682:0x6d17210] ... (省略若干让人头大的信息) ... allocation failure; scavenge might not succeed
这就好比一个吃货面对一桌山珍海味,却只有一个迷你小胃,只能眼巴巴地看着,却吃不下。用 free -h 命令一看,果然,内存已经爆了!
怎么办?在线等,挺急的!
还好,我灵机一动,想起了 Node.js 的 --max_old_space_size 参数,这可是救命的稻草啊!赶紧加上:
NODE_OPTIONS="--max_old_space_size=4096" yarn start
或者,如果你要运行脚本:
NODE_OPTIONS="--max_old_space_size=4096" your_script.js
4096MB!相当于给我的小服务器装了个“大胃王”插件!这下,编译过程终于顺畅了,我的小服务器也终于松了口气,不再发出濒死的哀嚎。
经验总结:
- 不要试图跨平台复制
node_modules,乖乖重新安装才是正道。 - 2GB 内存跑 Next.js 项目,简直是拿生命在开玩笑!
--max_old_space_size参数是你的救星,记得根据实际情况调整内存大小。 - 下次部署,我要申请一台 8GB 内存的服务器! (握拳)
希望我的血泪史能帮到大家,少走弯路。如果还有其他部署问题,欢迎留言讨论!