Node >=18环境下Next.js构建出现malloc错误的原因及疑问
Node.js 18环境下Next.js 12构建触发malloc错误,未使用的sharp升级后问题解决
问题背景
原本运行在Node.js 16的Next.js 12项目,运行、构建均正常。迁移至Node.js 18(LTS版本)后:
next dev可正常运行next build触发malloc错误,报错信息如下:
info - Creating an optimized production build ..node(10686,0x17548b000) malloc: Incorrect checksum for freed object 0x1191c9c00: probably modified after being freed. Corrupt value: 0x80f1f1f1 node(10686,0x17548b000) malloc: *** set a breakpoint in malloc_error_break to debug error Command failed with signal “SIGABRT”.
环境差异
- 可正常构建:基于Node.js 18 Alpine镜像的Docker环境
- 构建失败:Mac M1 Ventura 13.4.1(Darwin 22.5.0)本地环境,多位同事复现相同问题
已尝试的无效操作
- 切换Node.js版本至20
- 重新安装
nvm、使用n工具、通过.pkg安装Node.js - 移除webpack的自定义配置
临时解决方法
通过npx native-modules检测到项目依赖sharp@0.30.5(安装时会编译为.node原生扩展),将其升级至v0.32.1后,next build不再触发malloc错误。
核心疑问
sharp仅用于一个独立的图片处理NPM脚本,next build过程中并未被require()或调用,但升级它却解决了构建时的malloc错误。这不符合Node.js文档中「原生扩展仅在被require()时才会加载链接」的描述,请问这是什么原因?
内容的提问来源于stack exchange,提问作者Daniel Macak
相关产品推荐
相关产品推荐

