You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vercel部署serverless函数使用canvas时ZLIB_1.2.9缺失如何解决

问题核心

Vercel Serverless 运行环境基于 Amazon Linux 2,其官方 yum 源内置的 zlib 最高版本仅为 1.2.7,无法满足新版 node-canvas 依赖的 libpng 对 ZLIB_1.2.9 版本的要求,因此直接通过 yum 安装无法拿到更高版本的zlib。


解决方案

方案1:更换无系统依赖的canvas实现(优先推荐)

直接替换原版node-canvas为@napi-rs/canvas即可,该库基于Rust开发,预先编译了适配所有主流Serverless环境的二进制包,无需任何系统依赖,API和原版node-canvas完全兼容,几乎不用修改业务代码:

  • 卸载原版canvas:npm uninstall canvas
  • 安装替代包:npm install @napi-rs/canvas
  • 业务代码中把所有require('canvas')替换为require('@napi-rs/canvas'),原有绘图逻辑不需要做任何调整

方案2:手动编译安装zlib 1.2.9(保留原版canvas)

如果必须使用原版node-canvas,可以修改package.json中的vercel-build脚本,手动下载zlib源码编译后替换canvas依赖目录下的库文件:

"scripts": {
  "vercel-build": "yum install -y libuuid-devel libmount-devel gcc make && \
    wget https://zlib.net/zlib-1.2.9.tar.gz && \
    tar xzf zlib-1.2.9.tar.gz && \
    cd zlib-1.2.9 && \
    ./configure --prefix=/tmp/zlib && \
    make && make install && \
    cd .. && \
    cp /tmp/zlib/lib/libz.so.1 node_modules/canvas/build/Release/ && \
    cp /lib64/{libuuid,libmount,libblkid}.so.1 node_modules/canvas/build/Release/"
}

该方案仅将编译好的高版本zlib供canvas单独使用,不会修改系统全局的zlib版本,不会影响其他系统组件运行。

方案3:使用预构建的Lambda层

可以提前打包包含zlib 1.2.9和完整canvas依赖的AWS Lambda层,在Vercel控制台配置对应函数使用该层即可,该方案适合有Lambda层使用经验的开发者,无需每次构建重复编译依赖。


内容的提问来源于stack exchange,提问作者keegan3d

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:15:03