Run mapbox-gl-js in nw.js and output a png image of mapbox map.
git clone
this gistcd
into itFrom this gist's directory:
$ /path/to/nw .
which outputs a png image of a mapbox map in output.png
and session info in
log.txt
.
mapbox-gl
versions greater than v0.22.0
don't work with nw.js
v0.14.0
and less. I haven't tried all version combinations, but mapbox-gl@0.34.0
and
nw.js@0.21.4
seem to get along well.
We can't require('mapbox-gl')
in the app's main.js
. This results in runtime
errors tracking back to the mapbox-gl
util/canvas.js
source file.
Explantation: mapbox-gl
relies on
headless-gl
to support node.js
contexts. headless-gl
(or just gl
on
npm) allow for the creation of WebGL contexts in node.js contexts. In turn, if
we require('mapbox-gl')
in the app's main.js
, nw.js
assumes that
mapbox-gl
is required in a node.js context, but the bindings in headless-gl
are incompatible with nw.js
which leads to runtime errors in headless-gl
.
Solutions: Input the CDN version of mapbox-gl in the app's index.html file.
For simplicity, this solution is used in this gist. Alternatively,
we can require('mapbox-gl')
in main.js,
browserify it and use the
resulting bundle file in the app's index.html file. This work because,
browserify shims require('gl')
calls with a browser-compatible
wrapper
as per the
browser
field in the headless-gl
package.json.
https://api.tiles.mapbox.com/mapbox-gl-js/v0.34.0/mapbox-gl.js