WebAssembly加载游戏资源时如何在Vue中正确调用?
我用Rust编译了一个小游戏的WASM模块,想在Vue组件里初始化它,但总是报错说找不到导出的函数。是不是我的加载方式有问题?
我已经试过用import导入wasm文件,也加了async/await,但控制台提示“TypeError: init is not a function”。下面是我的Vue组件代码:
<script setup>
import { onMounted } from 'vue'
import init, { start_game } from '@/assets/game.wasm'
onMounted(async () => {
await init()
start_game()
})
</script>
先安装必要的依赖:
npm install --save-dev @wasm-tool/wasm-pack-plugin
然后配置 vite.config.js 文件:
接着修改你的 Vue 组件代码,通过动态 import 来加载 WASM 模块:
注意这里用了
await wasm.default(),因为 Webpack 和 Vite 导出的默认函数名是default,不是init。这坑我之前也踩过,搞了好几天才搞定。最后记得检查Rust编译时是否正确导出了 start_game 函数,确保 #[wasm_bindgen] 属性没漏掉。这种跨语言调用确实挺烦人的,但弄通了就简单了。
记得在public/index.html里加个,这能帮你省不少事。