啊,今天又是“愉快”踩坑的一天呀

话说我为啥折腾这个 Go 语言和 gopherjs 呢?这个一言难尽啊。之前给公司的博客网站整新的编辑器的时候遗留了一个小 Bug 。由于是想要一个兼容 markdown 的富文本编辑器于是找了好久才发现一款比较适合的:vditor ,但是粘贴别的文章的内容时发现图片渲染会出现问题,我今天打开公司 PM 任务面板的时候发现了这个去年没完成的 issue。我之前就在 vditor 提了 ISSUE :https://github.com/Vanessa219/vditor/issues/813 。我以为最新版本已经修复了,没想到实际上还是有问题…

上次作者就说这并不是编辑器处理的而是这款编辑器背后的 markdown 解析器 lute 导致的问题。lute 这东西是 Go 写的,于是乎凭借着之前偷偷学了个把小时的 Go 语言的“信心”我决定看看这个 Bug 。过程我就不唠了不是本博客的重点。反正搞了半天终于找到问题了,于是乎我 Fork 了项目改掉之后我得编译成 JavaScript 所以才有了弄 gopherjs 的这一幕。

讲到这了,还没介绍本篇博客的主角,那么 gopherjs 是个啥东西呢?官方介绍:GopherJS 编译 Go 代码纯 JavaScript 代码。它的主要目的是使您有机会在Go 中编写前端代码,该代码仍将在所有浏览器中运行。

其实吧,讲通俗点就是一个用来把 Go 编译成 Js 可以用的轮子的东西

不过我发现 Go 的中文博客似乎比较少,关于 gopherjs 的就更少了…

首先我们安装 Golaog 官网就能的到最新版本,不过这里 gopherjs 好像目前只支持 1.12.x 的版本,如果你没有其他需求的话就可以直接下载 12.x 的 Go 版本。然后配置 Go 的环境变量,我这边用的终端是 bash 所以是 ~/.bash_profile 如果用的是 zsh 或者其他终端的在相应的环境变量配置文件中配置如下代码

# Golang 环境变量
export PATH=$PATH:$(go env GOPATH)/bin
export GOPATH=$(go env GOPATH)

接下来就是安装 gopherjs 了,我们参考官方文档,执行下面的命令

go get -u github.com/gopherjs/gopherjs

一般来说安装之后就能使用了 gopherjs build [package/file]gopherjs install [package] 了。

gopherjs build [package or file path]
# 编译,一般会直接在当前目录生成 .js 文件和 .js.map 文件,以代码文件名或者包名命名

gopherjs help
# 帮助

更多文档我这里就不一一翻译了,直接上 GitHub:https://github.com/gopherjs/gopherjs

如果直接安装的 Go 1.12.x 版本的话就直接使用就好了,但是我是因为之前就安装了 Go 1.15.8 导致我这边直接使用 gopherjs 会出现如下错误

$ gopherjs build main.go

GopherJS 1.12-3 requires a Go 1.12.x distribution, but found version go1.15.8

后来才发现原来他们 GitHub 主页早就说了解决方案,具体操作:先使用已有的 Go 安装 Go 1.12.16 版本,然后设置一个 GOPHERJS_GOROOT 环境变量。首先执行

go get golang.org/dl/go1.12.16

go1.12.16 download

安装下载完成后,修改 ~/.bash_profile 文件(如上,如果使用其他系统或者其他终端程序请换成你自己相应的配置文件)加上以下配置

export GOPHERJS_GOROOT="$(go1.12.16 env GOROOT)"  # 还需要将该行添加到你的 .profile 等效文件中

至此我终于可以愉快的将 Go 编译成可用的 Js 文件了,想吐槽的就是编译成功居然没有任何提示我还以为失败了,导致我试了好几次才发现原来已经编译成功了(手动狗头