Compiles Go to WASM and deploys to the jsgo.io CDN
MIT License
The wasmgo
command compiles Go to WASM, and serves the binary locally or deploys to the jsgo.io CDN.
go get -u github.com/dave/wasmgo
wasmgo serve [flags] [package]
Serves the WASM with a local web server (default to port 8080). Refresh the browser to recompile.
wasmgo deploy [flags] [package]
Deploys the WASM to the jsgo.io CDN.
-b, --build string Build tags to pass to the go build command.
-c, --command string Name of the go command. (default "go")
-f, --flags string Flags to pass to the go build command.
-h, --help help for wasmgo
-i, --index string Specify the index page template. Variables: Script, Loader, Binary. (default "index.wasmgo.html")
-o, --open Open the page in a browser. (default true)
-v, --verbose Show detailed status messages.
-j, --json Return all template variables as a json blob from the deploy command.
-t, --template string Template defining the output returned by the deploy command. Variables: Page, Script, Loader, Binary. (default "{{ .Page }}")
-p, --port int Server port. (default 8080)
Omit the package argument to use the code in the current directory.
Here's a simple hello world:
wasmgo serve github.com/dave/wasmgo/helloworld
The page (http://localhost:8080/) opens in a browser.
Here's an amazing 2048 clone from hajimehoshi:
go get -u github.com/hajimehoshi/ebiten/examples/2048/...
wasmgo deploy -b=example github.com/hajimehoshi/ebiten/examples/2048
The deployed page opens in a browser.
You may specify a custom index page by including index.wasmgo.html
in your project or by using the index
command line flag.
Your index page should look something like this:
<html>
<head><meta charset="utf-8"></head>
<body>
<script src="{{ .Script }}"></script>
<script src="{{ .Loader }}"></script>
</body>
</html>
The index page template and the -t
flag are both Go templates with several variables available:
Page The URL of the page on jsgo.io (deploy command output only).
Script
To load and execute a WASM binary, a some JS bootstap code is required. The wasmgo command uses a minified
version of the example in the official Go repo.
The URL of this script is the Script
template variable.
Loader
The loader JS is a simple script that loads and executes the WASM binary. It's based on the example
in the official Go repo,
but simplified to execute the program immediately instead. The URL of this script is the Loader
template variable.
Binary The URL of the WASM binary file.
Unfortunately wasmgo does not host your static files. I recommend using rawgit.com to serve static files.
The wasmgo deploy
can't yet split the binary output by Go package, can you help?