Server-Side Canvas on Netlify
If you've tried deploying
node-canvas on Netlify, you may have encountered a few errors.
If you're deploying to Netlify using the CLI and you're not running linux, the errors may involve complaints about incompatible architecture.
node-canvas will build its binaries based on the architecture doing the install, so if you're deploying what you built locally (not linux) to Netlify (linux), it will complain. Easiest thing here is to do deploys via the Netlify's auto-deploy or via the UI so that the packages are built on the right architecture.
There's a way to
npm install forcing the architecture, but at first thought this sounds like it may not run or build locally if it depends on the availability of local libs. Not sure, haven't tried.
Bundle Size Exceeded
If you're using
node-canvas in functions you may get a successful build, but see an error to the effect of:
The function zip XXX.zip size is X MB, which is larger than the maximum supported size of Y MB
It will then show you the list of large files contributing to this issue, and they'll most likely be
.so files in the
node-canvas directory. The biggest offender tends to be
If you need svg support, I'm sorry.
If you don't need svg support, the good news is that svg support is optional in
node-canvas. You just have to build it without the modules you don't want.
The bad news is that while there are instructions for how to do this on the
node-canvas wiki, getting it going on Netlify is not entirely straight-forward.
If you're building on linux, this may work if you do the custom build locally then deploy via CLI. If you're not using linux, you'll likely encounter the architecture issue above.
One solution I saw was to use a Docker/multipass instance to build a custom version of
node-canvas then as part of the build process, copy those files the shared instance folder into
node_modules before running the app build, but that sounded like a right pain in the derrière.
Some people said that worked for them though, so yay for them.
It's not entirely a drop-in replacement for
node-canvas, but it's close. There are a few quirks, but nothing I haven't got a comparatively straight-forward workaround for, and it beats faffing around with complicated build and deploy strategies.