おはようございます。先日長男が園の行事でゴミ収集車の見学を行って、ゴミ収集車のペーパークラフトをもらって帰ってきました。喧嘩になるだろうということで、カラーコピーして次男の分も用意しましたが、案の定、次男の分は自分が作ることになった@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モジュールのディレクトリにコード一式を持ってきて実行すると動く
を運よく発見できて、物理的に同じ場所のnode-canvasモジュールを読み込まないと駄目っぽいことが分かった。