【Rust WebAssembly 入门实操遇到的问题】

Rust WebAssembly 入门实操遇到的问题

  • 什么是WebAssembly
  • 跟着教程走
  • wasm-pack build error
  • 总结


什么是WebAssembly

WebAssembly(简称Wasm)是一种基于堆栈的虚拟机的二进制指令
格式。Wasm 被设计为编程语言的可移植编译目标,支持在 Web 上部
署客户端和服务器应用程序。

简而言之,WebAssembly(wasm)是一种可以执行在堆栈虚拟机的二进制可执行指令集(所以在你编译后将看到后缀为wasm的二进制文件,这种文件可以运行在Wasm Runtime 上),一般的,市面上常见的浏览器均支持wasm Runtime。由此也可以看出,只要有Runtime在,wasm可以运行在任何结构的硬件上,这也为wasm在更多领域中发挥作用提供了可能。


跟着教程走

wasm tutorial 提供了完整的,从安装Rust环境到编译pkg,再到运行服务调用wasm的整个教程,初学者可以跟着教程走一遍有一个大概的感受。在学习教程的过程中会遇到一些问题,以下是我遇到的问题,作为个人整理和分享。

wasm-pack build error

在这里插入图片描述
根据教程上的步骤,执行

wasm-pack build

会自动生成pkg文件夹以及相关的文件,不过在这里我遇到了下面的问题:
在这里插入图片描述
报错显示我无法使用stable版本的rust使用示例工程中的attribute,难道我需要使用nightly版本吗?但是官方文档并没有要求这样做,回顾以下我们跟着文档都做过什么,发现cargo.toml中官方给到的wasm-bindgen 版本和我们真正使用到的版本不同,
官方是0.2.84,而我们使用的是0.2.97(当前最新),或许问题出在这里:

[dependencies]
wasm-bindgen = ">=0.2.87 , < 0.2.88"

如果我们像唯一确定一个版本使用,可以如上述写法,而默认的:

[dependencies]
wasm-bindgen = "0.2.84"

cargo的默认行为会拉取最大子集中最新的版本,因为wasm-bindgen目前还是0.xx.xx版本,非稳定版本,所以为了避免发生不必要的问题,尽量控制版本统一,好,控制完版本后重新运行:

wasm-pack build

发生了新的问题:

[INFO]: ⬇️  Installing wasm-bindgen... 

我们的编译进程停止在这了,看到提示是正在安装wasm-bindgen,wasm-pack并没有正确获知我们已经安装了wasm-bindgen,同样的问题别人已经遇到过了,我们需要安装wasm-bindgen-cli :

cargo install wasm-bindgen-cli --version 0.2.87

需要保证的是,wasm-bindgen-cli与wasm-bindgen版本要一致,好的,我们继续编译,发现不会再停在安装wasm-bindgen上,而是又出现了新的问题:
在这里插入图片描述
生成的文件夹中没有package.json文件,没有这个文件,再后续的启动环节中,无法找到对应的wasm包,通过问题排查,发现需要手动在cargo.toml中添加:

[package.metadata.wasm-pack.profile.release]
wasm-opt = false

至此,问题就全部解决了,跟着教程启动服务后,访问服务器便可以看到alert弹窗了。


总结

官方文档通常是我们接触技术最直接最安全的文档,但是或许因为迭代之类的问题官方文档会忽略一些细节问题,这就需要开发者收集整理继而解决自己的问题。

上一篇:【Gitlab】gitrunner并发配置


下一篇:SpringBoot 打造校园失物招领智慧系统:让失物与主人不再错过