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

news2025/1/21 1:04:09

【建议先看】继上一篇【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函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/408662.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于vue2与vue3

Vue组件之间通信方式有哪些 vue是组件化开发框架&#xff0c;所以对于vue应用来说组件间的数据通信非常重要。 1. 组件通信常用方式有以下8种: props $emit/$on $children/$parent $attrs/$listeners ref $root eventbus vuex 注意vue3中废弃的几个API 在vue3中废除$c…

前端实现tab栏切换,这么常见的案例你学会了吗?

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域新星创作者。&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4d…

vue2 vue-router 不显示页面问题

目录 菜鸟入门&#xff0c;配置vue-router一直不显示。 排除过的问题点&#xff1a; 项目源码如下&#xff1a; 分析&#xff1a; 解决方案&#xff1a; 可能会遇到错误 这vue-router页面总算出来了&#xff1a; 菜鸟入门&#xff0c;配置vue-router一直不显示。 首先去…

el-cascader数据渲染及回显至页面(以及踩坑历程+解决)

第一次使用el-cascader就把坑踩了个遍&#xff0c;写个记录&#xff0c;也希望能够帮助到同为小猿的你们。 下面是我写的一个还原项目的例子 Bug1 首先是最小子集仍然有children&#xff0c;但是children为空数组&#xff0c;el-cascader渲染时&#xff0c;发现有children所…

【已解决】VUE3+webpack >5报错问题

问题截图&#xff1a; This is no longer the case. Verify if you need this module and configure a polyfill for it.If you want to include a polyfill, you need to:- add a fallback resolve.fallback: { "process": require.resolve("process/browser&q…

微信小程序父子组件之间传值

父子组件之间传值 组件之间传值有两种&#xff0c;一种是父向子传值&#xff0c;另外一种是子向父传值 先说一下大致的区别吧… 区别&#xff1a; 父向子传值使用的是属性绑定&#xff0c;子组件中 的 properties 对象 进行接收父组件传递过来的值子向父传值使用的是自定义…

wangEditor5在vue中的基本使用

目录 一、wangEditor5是什么 二、wangEditor5基本使用 &#xff08;一&#xff09;、安装 &#xff08;二&#xff09;、编译器引入 &#xff08;三&#xff09;、css及变量引入 三、wangEditor5工具栏配置 &#xff08;一&#xff09;、editor.getAllMenuKeys() &…

uniapp自定义tabbar(支持中间凸起,角标,动态隐藏tab,全端适用)

uniapp自定义tabbar&#xff08;支持中间凸起&#xff0c;角标&#xff0c;全端适用&#xff09;背景思路实现尾巴背景 在使用uniapp进行开发时&#xff0c;tabbar是我们使用的很频繁的一个组件&#xff0c;但是在特定的平台会有一些使用上的限制&#xff0c;无法通过一套代码…

box-sizing:border-box的理解和作用

盒子模型 盒子模型是指&#xff1a;外边距&#xff08;margin&#xff09; border&#xff08;边框&#xff09; 内边距&#xff08;padding&#xff09; content&#xff08;内容&#xff09; 可以把每一个容器&#xff0c;比如div&#xff0c;都看做是一个盒子模型 比如你给…

Vue实战【Vue开发中的的前端代码风格规范】

目录&#x1f31f;前言&#x1f31f;命名规范1.1 项目文件命名1.1.1 项目名1.1.2 目录名1.1.3 图像文件名1.1.4 HTML 文件名1.1.5 CSS 文件名1.1.6 JavaScript 文件名1.2 Vue 组件命名1.2.1 单文件组件名1.2.2 单例组件名1.2.3 基础组件名1.2.4 业务组件1.2.5 紧密耦合的组件名…

前端开发中常见的浏览器兼容性问题及解决方案

文章目录前言一、浏览器四大内核二、主流兼容问题&#xff08;一&#xff09;浏览器引擎&#xff08;二&#xff09;兼容问题的原因&#xff08;三&#xff09; 为什么浏览器会存在兼容性问题?&#xff08;四&#xff09;处理兼容问题的思路1. 要不要做&#xff1f;2. 做到什么…

vue3 | HighCharts实战自定义封装之径向条形图

1.前言 目前正在做vue3的数据可视化项目&#xff0c;vue3的组合式api写法十分方便&#xff0c;可以有各种玩法&#xff0c;有兴趣的同学可以看我个人主页的其他文章。难点是在网上找了一圈的有关径向条形图的示例都没有好的解决方案&#xff0c;决心亲自下手&#xff0c;在其中…

Vue(四)Vue脚手架——手把手教你安装和使用

一、什么是Vue脚手架 之前我们使用Vue框架&#xff0c;都是通过脚本的方式引入Vue脚本&#xff0c;在html中运行&#xff0c;但是这只是入门级的操作&#xff0c;下面我们介绍Vue脚手架。 脚手架&#xff1a;脚手架是一类软件的总称&#xff0c;此类软甲用于生成标准化的项目包…

Vue3中简单使用Mock.js

mock.js简介 官方链接&#xff1a;Mock.js (mockjs.com) 前端开发人员用来模拟虚拟数据&#xff0c;拦截ajax请求&#xff0c;方便模拟后端接口 安装 npm install mockjs 使用 本文主要介绍在Vue项目中使用mock.js&#xff0c;包括axios发送请求与请求简单封装 创建mock文件夹…

js+css+html制作简易留言板

jscsshtml制作简易留言板1 案例说明2 编写HTML代码3 编写css代码4 编写JavaScript代码5 全部代码1 案例说明 利用JavaScript、css以及html制作简易留言板&#xff0c;也可以看作是简易评论区。 要求在页面文本框中输入一些文字之后&#xff0c;点击“发布”按钮&#xff0c;就…

前端element-ui组件库el-card卡片【hover效果与点击事件(点击无效用@click.native=““)解决】

&#x1f680;作者简介 主页&#xff1a;水香木鱼的博客 专栏&#xff1a;后台管理系统 能量&#xff1a;&#x1f50b;容量已消耗1%&#xff0c;自动充电中… 笺言&#xff1a;用博客记录每一次成长&#xff0c;书写五彩人生。 &#x1f4d2;技术聊斋 &#xff08;1&#…

直面JavaScript数据处理的5个常见疑难杂症

前言 随着前端技术的不断发展&#xff0c;前端工作需要展示的界面越来越复杂&#xff0c;因此数据处理的场景越来越多&#xff0c;例如&#xff1a;后台管理系统中常常需要展示一个树状结构&#xff0c;后台返回的前端的数据是平级结构&#xff0c;这时候需要我们把数据转成树结…

进阶版JavaScript学习【第二期】

距离上一期更新已经过了好久&#xff0c;非常抱歉。因为自己的一些原因&#xff0c;没有能够及时更新。 博主主页&#xff1a;GUIDM的主页 专栏内容&#xff1a;进阶版JavaScript学习 往期内容&#xff1a;第一期 给大家安利一个刷题神器&#xff1a;牛客网 JavaScript系列刷题…

Vue使用Element-UI实现分页效果

前言 分页在展示数据列表的场景肯定是非常多的。 一般的项目开发中&#xff0c;数据量特别大&#xff0c;一般都是后端接口直接处理分页返回&#xff0c;前端直接调用即可。 但是前端也是可以不需要借助后端&#xff0c;自己也是可以处理分页的。今天我这个后端开发就站在前…

H5画布 canvas(一)canvas简介、绘制圆形/矩形、案例饼状图绘制

目录 1. canvas 简介 2. canvas 标签介绍 3. canvas 上下文 Context 4. 案例&#xff1a;在 canvas 画布中绘制表格 5. canvas 的 beginPath 状态 6. 绘制矩形 rect 7. 绘制圆形 arc 8. 案例&#xff1a;根据一组数据绘制饼状图 1. canvas 简介 canvas 是HTML5 提供的一…