node-canvasをvercelにdeployしたときのerror

2021年07月23日2021年07月27日

きっかけはNext.jsで動的OGPを生成する機能を実装するところ。
node-canvasを使ってvercelにデプロイしたところ、次のエラーが発生。

Error: /lib64/libz.so.1: version `ZLIB_1.2.9' not found (required by /vercel/path0/node_modules/canvas/build/Release/libpng16.so.16)


回避方法

今のところ、node-canvasのバージョンを固定することで回避できるとのこと。

./package.json

{
	  "name": "offiter",
	  "version": "0.1.0",
	  "private": true,
	  "scripts": {
	    "dev": "next dev",
	    "build": "next build",
	    "start": "next start"
	  },
	  "dependencies": {
	    "canvas": "2.6.1"
	  },
	  "devDependencies": {
	  }
	}


自分の場合、npm install --save canvasすると2.8.0がインストールされてました。
ローカルだと問題ないのですが、vercel上だとエラーが発生するのでpackage.jsonだけ修正しておけばよかったです。

根本的な解決方法

2021/07/27時点では、まだ解決されてなさそうです。
issue

vercelはAWSのlambdaを使用しているのですが、canvasがまだAWSのlambdaのnode14に対応していないのが原因な気がします。
解決されることを気長に待ちましょう。

まとめ

node-canvasをvercelにデプロイするときにはバージョンを2.6.1に固定する。