问题标签 [wasm-pack]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1284 浏览

wasm-bindgen - wasm-bindgen:即使安装了 wasm-pack,也找不到命令 (0.8.1)

从这篇文章https://asquera.de/blog/2018-10-01/webassembly-and-wasm-bindgen/我发现我们可以运行wasm-bindgen target/wasm32-unknown-unknown/release/qr_wasm.wasm --out-dir ./dist --no-modules --no-typescript以创建 wasm 和 js 文件而无需运行wasm-pack build(它会安装 wasm-bindgen 不管我以前安装了一个,使它有点慢)这对我来说似乎更灵活,但是当我运行wasm-bindgen xxx它时说:zsh: command not found: wasm-bindgen

我用谷歌搜索了它,但似乎没有人遇到过这个问题。我的项目中也有cargo installwasm-bindgen 和 wasm-bindgen-cli。

0 投票
1 回答
358 浏览

rust - 如何使用 Wasm-Bindgen Web_sys Wasm-pack 将字符串从 Js 传递到通过 Rust 生成的 Wasm

代码是基本的,我从 js 调用一个函数,它带有一个在 lib.rs 中声明的字符串输入,但是该字符串没有传递给 wasm 中的函数我收到一个空字符串,反向也不起作用我不是也可以将字符串从 wasm 传递给 js。

wasm 文件看起来像这样

js 看起来这个 wasm 已经成功启动了其他功能工作正常

货物 toml 看起来像这样

0 投票
1 回答
1104 浏览

c - 使用 clang 将 C++ 库编译为 wasm 失败,并出现“stdlib.h”文件未找到错误

我正在尝试将此示例代码从 rust 编译为 wasm。这是一个 rust crate,可让您创建/编写 excel 文件。我已经成功地使用cargo run.

不幸的是,当我尝试将其编译为 Web 程序集时,我遇到了一个错误,指出在编译bzip2-sys<stdlib.h>时找不到 library ,一个常见的 C 库,一个 rust crate。

当我第一次尝试编译它时,它提示我安装我从这里做的 clang (Windows 的预构建二进制文件(64 位和 32 位)),并且我已经包含C:\Program Files\LLVM\bin到系统 Path 环境变量中。我还安装了 MinGW-w64,以及带有 Visual C++ 构建工具的 Visual Studio 2017。

您可以在下面的 Visual Studio Code 中看到整个错误。

0 投票
1 回答
877 浏览

rust - Web Assembly 和 Rust:cargo build 与 wasm-pack

构建 wasm 使用的一些示例cargo build(如 Programming WebAssembly 书中的示例)

和其他人使用,

这两种构建项目的方法有什么不同?

0 投票
1 回答
412 浏览

rust - 如何使 Rust Game of Life WebAssembly 作为静态网站运行?

我已经阅读了 Rust Game of Life 的教程,并且在 Web 浏览器中有一个可以运行的游戏,但它只能在与它捆绑的演示 Web 服务器上运行。我可以启动服务器,npm start它在端口 8080 上运行 webpack-dev-server。当我通过该端口访问该站点时,它工作正常。但是,如果我尝试将该站点复制到 Apache 之类的 Web 服务器,它就无法正确加载。我目前从中得到的错误是:

在教程中,网站的根目录是www/存储库中调用的文件夹,并且从 Rust 程序生成的 wasm 模块放置在pkg/. 有一个符号链接www/node_modules/wasm-game-of-life../../pkg/我已经用顶级pkg/文件夹的实际副本替换了该符号链接,以便网站完全包含在www/文件夹中,然后将该文件夹放在我的网站上http:// www.north-winds.org/gol/但是,访问它会返回上述错误。我需要修改什么才能使其独立工作?

据我了解,这个 WebAssembly Game-of-Life 基本上是一个独立的客户端应用程序,除了可以提供带有适当 mime 类型的静态文件的 Web 服务器之外,不需要任何东西。我看不出有什么特别的要求。我确实在某处看到提到 WebSockets,但我不知道为什么这个应用程序需要这样做。我将此与来自https://webassembly.org/的 C 的“Hello, World”WebAssembly 示例进行了比较,最终得到了一个.wasm从 C 源代码生成的文件,以及一个用于执行它的 JavaScript 和 HTML 支持文件。当简单地复制到静态 Web 服务器位置时,这些文件可以正常工作。这就是我想要的 Rust 示例。

Rust Game-of-Life 中的一些相关代码如下。顶级 HTML 文件包括以下几行:

引导 JavaScript 文件仅包含以下内容:

它引用的 index.js 文件在 Wasm 的其他粘合逻辑中包含以下内容:

使这项工作独立起来缺少什么?

0 投票
1 回答
736 浏览

rust - 没有预建的 wasm-opt 二进制文件

我正在尝试在我的树莓派 (3b) 上构建一些 webassembly rust 应用程序。一切顺利,虽然我在运行时遇到错误wasm-pack

似乎没有wasm-opt为我的(armv71)平台找到二进制文件。但是从这里克隆它们并自己构建它们似乎很容易。

但我的问题是如何将它们添加到 webassembly,以便找到它们?

编辑:要清楚,构建“成功”完成,即我可以运行包。但是,我想使用的大小或速度优化wasm-opt

0 投票
1 回答
61 浏览

wasm-bindgen - wasm-bindgen - 可以识别构建版本/日期吗?

对于 web 应用程序,开发循环 [更改 -> 构建 -> 部署 -> 测试] 是非常迭代的。由于浏览器缓存容易错误构建版本。因此,经常需要确定构建版本。

wasm-bindgen/是否wasm-pack提供了一些宏,例如Timestamp转储到日志文件中,以识别构建的版本?

类似的东西:log(BUILD_DATE)=>"2020:09:12 09:37:12"

0 投票
0 回答
116 浏览

express - 从 express 服务器导入 WASM

最近我一直在使用 Rust WASM 进行编码并使用 wasm pack 进行编译。完成编码后,我将编译后的文件放入我的静态文件夹(我可以确认它们是静态的),并尝试将它们导入我的 HTML 文件中。我不断收到此错误: 呃,为什么这个垃圾讨厌我

之后,我检查了请求,发现了这个 错误 2,为什么它说我有应用程序/wasm 的内容类型?

我很困惑为什么我在请求中得到一个无效的 mime 类型,它清楚地表明 mimetype 是正确的。在github上搜索后,其他人也遇到了同样的问题。但这是 2018 年的一篇较旧的帖子,他们说它会以更新的版本发布,即我已经安装的版本。https://github.com/expressjs/express/issues/3589

这是我的锈代码:

和我的 HTML 代码:

我对为什么这不起作用感到困惑,并希望得到一些帮助。

提前致谢。

0 投票
1 回答
1887 浏览

rust - 生成返回字符串的函数时,为什么 wasm-opt 在 wasm-pack 构建中失败?

我正在阅读康威生命游戏的 Rust WASM 教程

调用文件中最简单的函数之一Universe.render(它用于渲染表示游戏状态的字符串)。当我运行时它会导致错误wasm-pack build

如果我删除该函数,代码构建不会出错。如果我用以下函数替换它,构建将失败并出现相同的错误:

似乎任何返回 a 的函数都会String导致此错误。为什么?

以下是我的全部代码:

只需删除render此文件底部的函数即可使构建成功。render用任何返回 a的函数替换该函数String会导致构建失败。为什么?

0 投票
0 回答
321 浏览

javascript - 是否可以从 javascript 上下文测试 wasm-pack 生成的 webassembly?

我有一个这样的 rust + wasm 项目:

pkg我运行时构建的内容wasm-pack build

发出的 js 文件不是公共 rust 函数的简单传递——wasm-pack 为它们添加了一些逻辑。它看起来更像是公共 rust 函数的内存管理包装器。

在我的项目中,我现在真正想做的是针对发出的 wasm 的 js 接口编写自动化测试。这就是我的应用程序所做的,也是我需要测试的。我很高兴使用任何测试框架(我一直在用玩笑进行很多实验)。

我已经尝试了许多指南和工具来做到这一点,包括https://github.com/DrSensor/rs-jest,这很有希望,但缺乏测试 wasm-pack 生成的特定 js 接口的能力。此外,它似乎缺乏我的特定库所需要的东西,也许是我使用 wasm_bindgen 的特定方式。根据 rs-jest 实例化 WebAssembly 时,我会看到TypeError: WebAssembly.instantiate(): Imports argument must be present and must be an object,如果我将一个空对象传递给实例化,我会看到TypeError: WebAssembly.instantiate(): Import #0 module="__wbindgen_placeholder__" error: module is not an object or function.

我还尝试了一段时间来模拟浏览器使用 JsDom 获取和实例化 wasm 的特定方式。我生成了一个 index.html 文件,该文件通过脚本标签加载了 wasm-pack js 文件,然后我使用该 index.html 文件创建了一个 JsDom 实例。它正确地尝试从 js 中的导入中获取 wasm(这要求我将自己的fetch实现添加到 JsDom 实例的窗口中,从文件系统中返回 wasm 文件),但随后在 js 文件中途阻塞,因为module.require不是功能。在那之后我无法取得任何进展。

无论如何,这只是为了表明我无法找到任何解决方案。有没有人能够针对 wasm-pack 生成的 js 接口编写自动化测试?