Webpack 5 支持访问 Rust WebAssembly 线性内存

news/2024/9/20 3:17:16/文章来源:https://www.cnblogs.com/wxxweb/p/18381580

前面在《解决 Rust WebAssembly 启动 Web 程序报错》 一文中讲到,将 Webpack 升级到 5.54.0+。其实问题并未彻底解决,还潜藏另一个问题。当我们像原先那样,通过导出 memory 来访问 WebAssembly 线性内存:

import { memory } from "wasm-game-of-life/wasm_game_of_life_bg";

npm run start 时会报警,结果是程序无法正常运行:

export 'memory' (imported as 'memory') was not found in 'wasm-game-of-life/wasm_game_of_life_bg'(possible exports: Universe, __wbg_error_f851667af71bcfc6, 
__wbg_new_abda76e883ba8a5f, __wbg_set_wasm, __wbg_stack_658279fe44541cf6, 
__wbindgen_object_drop_ref, __wbindgen_throw)

在 github 上 wasm-bindgenwasm-packwebpack 的 Issues 中搜了一通。发现都有报告类似问题,不知为何过了两三年仍处于 Open 状态。不过评论中也有提出可供参考的解决办法。

总结了评论中的方法,我自己做了这样的修改:

首先,在 www 目录中创建一个源文件 memory.js,用以从 wasm 文件中导出 memory,内容如下:

// 从 `wasm`  文件中导出 `memory`
export { memory } from "wasm-game-of-life/wasm_game_of_life_bg.wasm";

然后,在我们需要访问 memory 的源文件中导入:

// 导入 `memory`
import { memory } from './memory';...// 访问线性内存中的宇宙细胞数据
const cellsPtr = universe.cells();
const size = Math.ceil((width * height) / 8);
const cells = new Uint8Array(memory.buffer, cellsPtr, size);

再次 npm run start,正常运行!

image

对了,别忘记我们之前升级 Webpack 5 时,修改了 webpack.config.js

const CopyWebpackPlugin = require("copy-webpack-plugin");
const path = require('path');module.exports = {entry: "./bootstrap.js",output: {path: path.resolve(__dirname, "dist"),filename: "bootstrap.js",},mode: "development",plugins: [new CopyWebpackPlugin({patterns: [{ from: "index.html" },]})],// 支持 WebAssembly 打包experiments: {asyncWebAssembly: true,syncWebAssembly: true},
};

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小白月赛99FG

F-自爆机器人_牛客小白月赛99 (nowcoder.com)假设从个点中的某个点\(\color{#50F}{a_k}\)设立墙,将机器人往左弹 , 中间过程不考虑,其一定会回到\(\color{#50F}{m}\)点,称其为\(\color{#50F}{k}\)点的一个往返,其距离为 \(\color{#50F}{a_k - a_{i} , i \in [ 1 , k -1]}\…

【颓】武3乱打

孤单的王者之路上,唯有幻象是他的仆从。他将在最终的黑夜之前,带上无罪的冠冕。写这篇博主要是为了听歌,大概率会断更。 2024.08.26本文来自博客园,作者:hzoi_Shadow,原文链接:https://www.cnblogs.com/The-Shadow-Dragon/p/18381573,未经允许严禁转载。 版权声明:本作…

时间序列特征提取:从理论到Python代码实践

时间序列是一种特殊的存在。这意味着你对表格数据或图像进行的许多转换/操作/处理技术对于时间序列来说可能根本不起作用。"特征提取"的想法是对我们拥有的数据进行"加工",确保我们提取所有有意义的特征,以便下一步(通常是机器学习应用)可以从中受益。也就…

《英雄无敌》2黄金版(英文)——免CD修改

《英雄无敌》2对原有1代的兵种、魔法种类都进行广泛的修改。其中城堡种类从原有的4种增加到6种,并且部分兵种还可以升级。魔法是使用不再是次数,而是消耗魔法点数,这样所学的魔法不再消失,而是在魔法点数不足时无法使用而已。《英雄无敌》2首先推出原版——延续的战争,接着…

解包黑神话悟空

首先下载这三个工具 https://dllinjector.net https://github.com/TheNaeem/UnrealMappingsDumperhttps://fmodel.app 其中第二个链接打开后这样 点击这个 只需要下载这个。 三个工具安装好后。 打开出现这个页面后 将 拖动到这个页面 然后通过steam启动黑神话悟空 输入b1-…

学习真DDD的最佳路径

本文书接上回《DDD是软件工程的第一性原理?》,关注公众号(老肖想当外语大佬)获取信息:最新文章更新;DDD框架源码(.NET、Java双平台);加群畅聊,建模分析、技术实现交流;视频和直播在B站。假DDD的特征 在开始之前,考虑到目前关于DDD的资料非常多且杂,我们需要具备分…

limu|P31-34|CPU和GPU

目录CPU VS GPU提升CPU利用率1、提升空间和时间的内存本地性2、并行以利用所有核提升GPU利用率1、并行2、内存本地性3、少用控制语句4、不要频繁在CPU和GPU之间传数据单机多卡并行分布式计算 CPU VS GPU 首先,一个芯片的空间是有限的,给了很多空间给某个内容(能力强),其他…

【综合评价方法】常见综合评价方法及其实现

@目录1.数据预处理1.1 区分指标的属性1.2 指标正向化1.2.1 负向指标1.2.2 中间指标1.2.3 区间指标1.3 标准化1.3.1 Z-score 标准化1.3.2 Min-max 标准化1.3.3 Robust 标准化1.3.4 归一化2.模糊评价法(主观)(not recommended)3.层次分析法(主观)(not recommended)4.PCA主成分…

k8s集群使用私有仓库通过containerd上传镜像(没解决...)

查阅资料 根据 containerd 中部分文档 https://github.com/containerd/containerd/blob/release/1.5/docs/cri/registry.mdhttps://github.com/containerd/containerd/blob/release/1.5/docs/hosts.mdhttps://blog.csdn.net/u010566813/article/details/125990298最终私有仓库…

OceanBase-OB备份异地恢复流程

OB备份异地恢复流程 ——2023年5月9日 一、【白屏操作】 1、确定当前备份的OB版本: 2、新建备份目录授权(备份到本地目录为例):mkdir /obbackup/ chown -R admin.admin /obbackup/保证能解析成功: 3、点击“备份”,查询操作系统的目录结构:4、拷贝租户层面数据文件…

软工homework1:自我介绍+5问

软工homework1:自我介绍+5问这个作业属于哪个课程 广工计院计科34班软工这个作业要求在哪里 作业要求这个作业的目标 学会创建并使用自己的博客和Github,熟悉其中的基本操作和功能,用Markdown编写完成自我介绍以及软工5问前言 亲爱的读者,正如你所见,这是我在博客园发布的…

Typora 上传到 Github 实现笔记同步管理

首先在 Github 上 new 一个 repository ,我建的名称是 md_notes 然后在本地 terminal 中启动以下命令新建一个 ssh key ssh-keygen -o生成的 public key 就是我们需要的东西,接着再输入 cat C:\Users\ASUS/.ssh/id_rsa.pub 就能获取到生成的密钥复制生成的密钥(两个 PS 中间…