non vorrei lavorare

2020年度からの小学校プログラミング教育の必修化を親として迎えるブロガーの書く、子供との日常

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モジュールを読み込まないと駄目っぽいことが分かった。

関連記事