non vorrei lavorare

昔はおもにプログラミングやガジェット系、今は?

TypeError: Image or Canvas expectedで半日近くが溶けた件

おはようございます。先日長男が園の行事でゴミ収集車の見学を行って、ゴミ収集車のペーパークラフトをもらって帰ってきました。喧嘩になるだろうということで、カラーコピーして次男の分も用意しましたが、案の定、次男の分は自分が作ることになった@kjunichiです。

背景

amesh-cliというアメッシュコマンドラインに表示するツールがnode v9.2.0にアップグレードした際に動かなくなり、対応してハマった。

TypeError: Image or Canvas expected

今までもnodebrew migrate-packageで

PKG_CONFIG_PATH=/opt/X11/lib/pkgconfig/

を指定する必要があったりで手間のかかる自作のamesh-cliコマンドであったが、今回は、 node-canvas

PKG_CONFIG_PATH=/opt/X11/lib/pkgconfig/ npm install canvas@next

で2.x系を入れるか

#include <cmath>

をnode-canvasのsrc配下のコードでコンパイルエラーが出たコードに追加するなどの作業に追われた。

が、そんなこんなで、何とかamesh-cliに必要なモジュールをリビルドしたが、

ctx.drawImage(img,0,0,w,h)
     ^

TypeError: Image or Canvas expected

とエラーに悩まされることに

分かった事

node-canvasモジュールはnode_modules配下以外は削除しないと駄目

当初、おなじcanvasモジュールで揃えておけばOKだろうと思い、ansi-canvas配下のnode_modules/canvasを コピーして動かした。しかし、一向にエラーが解消されない、が、 なぜか、ansi_canvasモジュールのディレクトリにコード一式を持ってきて実行すると動く

github.com

を運よく発見できて、物理的に同じ場所のnode-canvasモジュールを読み込まないと駄目っぽいことが分かった。

関連記事