Rust开发WebAssembly在Html和Vue中的应用【后篇】

【建议先看】继上一篇【Rust开发WebAssembly在Html和Vue中的应用】遗留下来的问题

Rust开发WebAssembly在Html和Vue中的应用_一码超人的博客-CSDN博客

本文讲述Vue2与H5版uniapp如何引入rust webassembly的应用流程 

在上一文中末尾,我说过vue2在引入胶水js后执行会报错,如下:

 

         说真的,我前端并不是很好,尤其对手脚架的相关操作,在查询import.meta了解到,是一个给JavaScript模块暴露特定上下文的元数据属性的对象。它包含了这个模块的信息,比如说这个模块的URL。但是为什么会报“当前未启用对实验语法“importMeta”的支持”?说真的,vue生态这么多年了,我想着百度一下吧。居然没有人问这个相关的问题???当然在座的各位如果有这个问题的解决方案可以留言或者加我好友私聊探讨一下,我是那种有问题无法正规处理就很难受那种~ 也不知道是不是和vite有关。

废话不多说了,进入本文主题。

Vue2应用Rust wasm

创建vue2项目

 在根目录与public下都放入pkg生产文件

 进入代码执行wasm函数

<script>
import HelloWorld from './components/HelloWorld.vue'
import init, {add, my_str} from "../pkg/mylib.js";
export default {
  name: 'app',
  components: {
    HelloWorld
  },
  async created(){
	  console.log(111)
	  this.in11()
  },
  methods:{
	  async in11(){
		  await init()
		  console.log(add(1,2))
		  console.log(my_str("5LiA56CB6LaF5Lq6"))
	  }
  }
}
</script>

直接npm运行,会报错哦!

 如上述,提示不支持importMeta,下方也给了建议,安装“@babel/plugin-syntax-import-meta”插件,我尝试做了下,最后会提示加载wasm文件问题,再无下文了。

那有没有更暴力简单一点的方法呢?肯定是有的!

首先先了解import.meta.url返回的是什么?如下:

 改写js胶水文件,大不了不用它了好不好?

 注意根目录下的pkg/mylib.js与public下的pkg/mylib.js都要做如此修改~~~~

		//import.meta.url返回的数据:http://127.0.0.1:8080/pkg/mylib.js
		var url = location.origin + '/pkg/mylib.js'; //http://127.0.0.1:8080/pkg/mylib.js
        input = new URL('mylib_bg.wasm', url);

然后npm运行,就不会报错了,这个在手脚架非常通用!不过在与后端整合时需要注意路由问题!!!!!!!注意路由问题!!!!!!!!!注意路由问题!!!!!!!

也就是说线上部署后 https://域名/pkg/mylib.js一定是要能访问到的!

不行就在站点运行跟目录扔个pkg!!!!

运行后结果

 虽然很奇葩,但是怪我前端能力也就是这样了。不过通用性很好,甚至支持uniapp H5!

UNIAPP应用Rust wasm

 创建一个uniapp

 

 注意这里的胶水js一样需要如上修改!

		//import.meta.url返回的数据:http://127.0.0.1:8080/static/pkg/mylib.js
		var url = location.origin + '/static/pkg/mylib.js'; //http://127.0.0.1:8080/static/pkg/mylib.js
        input = new URL('mylib_bg.wasm', url);

 当然情况也是一样,部署站点后,一定是根据这个地址能访问到这个js!不行就在站点根目录扔个/static/pkg!!!

运行wasm函数

<script>
	import init, {add, my_str} from "@/static/pkg/mylib.js";
	export default {
		data() {
			return {
				title: 'Hello'
			}
		},
		onLoad() {
			this.inii()
		},
		methods: {
			async inii(){
				await init()
				console.log(add(1,2))
				console.log(my_str("5LiA56CB6LaF5Lq6"))
			}
		}
	}
</script>

 运行结果

 总结

总算是心里好受一些,不过很丑陋,对于部署线上非分离式的就很难受了【路由与静态资源访问问题】。所以如果有前端大神可以提出一下建议,能否有一个好的方案解决?比如支持importMeta、或者importMeta的替代方案?

希望能有一位关注的大神,来优化该问题。

更新日期:2022/8/8

解决vue2不支持importMeta语法问题

vue手脚架安装 @open-wc/webpack-import-meta-loader 基座

npm i @open-wc/webpack-import-meta-loader

安装以后配置webpack

创建vue.config.js

 

 

const webpack = require('webpack');
module.exports = {
  configureWebpack: {
    module: {
      rules: [
        {
          test: /\.js$/,
          use: {
            loader: '@open-wc/webpack-import-meta-loader',
          },
          // include: path.resolve(__dirname, 'node_modules/cesium/Source')
        },
      ]
    },
    plugins: [

    ],
  }
}

之后pkg/mylib.js胶水文件中的import.meta.url就不会报不支持的错误了!

 

input = new URL('mylib_bg.wasm', import.meta.url);

这个是正规的解决方案,解决临时方案的部署缺陷。

整体流程:

1、安装支持import.meta基座插件。

2、配置webpack引入插件。

3、rust生成的pkg无需任何改动直接拖进项目。

4、完美启动无报错执行wasm函数。

  • 71
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 63
    评论
### 回答1: Rust WebAssembly游戏电子书是一种使用Rust编程语言和WebAssembly技术来制作的电子书,主要面向游戏开发者和编程爱好者。这种电子书结合了Rust的高效性能和WebAssembly的跨平台特性,提供了一种新颖的方式来开发Web游戏。 Rust是一种现代的系统编程语言,它以安全性、并发性和速度而闻名。Rust编写的游戏可以利用其强大的类型系统和内存安全性来避免一些常见的编程错误,从而提高游戏的稳定性和可靠性。此外,Rust的高性能和优化能力使得游戏在各种平台上都能够快速运行,为玩家提供良好的游戏体验。 WebAssembly是一种可移植的二进制格式,可以在各种浏览器和操作系统上运行。通过将Rust代码编译成WebAssembly,游戏可以在Web环境无缝运行,并且具有与原生应用程序相媲美的性能。由于WebAssembly的跨平台特性,游戏开发者可以轻松地将游戏部署到不同的平台上,无论是桌面、移动设备还是嵌入式系统。 Rust WebAssembly游戏电子书可以帮助游戏开发者快速入门和学习如何使用RustWebAssembly来制作游戏。它提供了详细的教程和示例代码,涵盖了从基本概念到高级技术的各个方面。通过学习这本电子书,开发者可以了解如何使用Rust的游戏开发框架和库,如何在WebAssembly实现游戏逻辑和渲染,以及如何与Web平台进行交互。 总之,Rust WebAssembly游戏电子书是一个有助于开发者学习和掌握使用RustWebAssembly制作游戏的资源。它将Rust的性能和可靠性与WebAssembly的跨平台特性相结合,为游戏开发者提供了一种新的方式来构建高性能、可移植的游戏。 ### 回答2: Rust是一种高性能的系统级编程语言,具有内存安全和并发性。WebAssembly是一种在Web浏览器运行高性能代码的技术。在RustWebAssembly的结合,我们可以创建非常出色的游戏和电子书。 使用Rust编写WebAssembly游戏可以带来很多优势。首先,Rust的性能非常出色,能够提供流畅的游戏体验,即使在较低配置的设备上也能运行良好。其次,Rust的内存安全性能让我们可以避免常见的内存错误,如空指针引用和缓冲区溢出。这为游戏开发者提供了更强大的工具,使他们能够编写更可靠和稳定的代码。 对于电子书的开发RustWebAssembly也是一个不错的选择。通过将电子书编译为WebAssembly,我们可以在Web浏览器交互式地阅读和使用电子书。这为读者提供了更多的功能和交互性,如搜索、高亮、书签等。此外,Rust的内存安全性质使得电子书可以更可靠地加载和运行,避免了常见的安全漏洞和崩溃问题。 总而言之,通过使用RustWebAssembly,我们可以创造出高性能、可靠和交互式的游戏和电子书体验。无论是开发游戏还是电子书,RustWebAssembly是一个令人兴奋和具有潜力的组合,可以为用户带来更加出色的体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 63
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一码超人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值