首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何调用具有wasm-bindgen的模块的JavaScript函数?

如何调用具有wasm-bindgen的模块的JavaScript函数?
EN

Stack Overflow用户
提问于 2020-11-16 01:43:17
回答 1查看 1.2K关注 0票数 4

我正在尝试使用Web3 JavaScript库,因为我被困在了锈病中。库的标准使用从以下几个方面开始:

代码语言:javascript
复制
// In Node.js use: const Web3 = require('web3');

let web3 = new Web3(Web3.givenProvider || "ws://localhost:8545");

您应该导入的模块是一个构造函数,它还具有其他一些属性。我应该绑定这个API的锈蚀代码如下所示:

代码语言:javascript
复制
#[wasm_bindgen(module = "web3")]
extern "C" {
    type Web3;

    #[wasm_bindgen(constructor)]
    fn new(_: &Provider) -> Web3;

    type Provider;

    static givenProvider: Provider;
}

最后输出import { Web3, givenProvider } from 'web3';并尝试运行失败的new Web3(...)。它应该做一些类似于import * as Web3 from 'web3';、运行new Web3(...)和引用Web3.givenProvider的事情。

如何才能让wasm-bindgen输出这样的代码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-21 06:26:48

编辑:原来的答案是错误的。您可以使用wasm-bindgen导入这样定义的东西,它们是合法的ES6。或者至少在ES6模块中有相同的概念。他们叫他们违约出口/进口。这有点尴尬,但是导入它们的方法是使用js_name = "default"。就像这样:

代码语言:javascript
复制
#[wasm_bindgen(module = "web3")]
extern "C" {
    #[wasm_bindgen(js_name = "default")]
    type Web3;

    #[wasm_bindgen(constructor, js_class = "default")]
    fn new(_: &Provider) -> Web3;

    #[wasm_bindgen(static_method_of = Web3, getter, js_class = "default")]
    fn givenProvider() -> Provider;

    type Provider;
}

在方法上需要js_class参数,它不记得Web3js_namedefault

旧的,错误的答案

您不能让wasm-bindgen生成这样的代码的原因是因为它不是合法的ES6。ECMAScript模块对所有内容都使用命名导出。Web3实际上是一个CommonJS模块,这些模块确实支持拥有一个匿名导出。

它几乎起作用的原因是因为我使用webpack,webpack允许您使用ES6语法导入ES6模块,尽管语义略有不同。

解决方案是创建一个小空间,从一个CommonJS模块导出ES6模块:

代码语言:javascript
复制
export let Web3 = require('web3');

那么,这个绑定将起作用:

代码语言:javascript
复制
#[wasm_bindgen(module = "/src/web3-wrapper.js")]
extern "C" {
    type Web3;

    #[wasm_bindgen(constructor)]
    fn new(_: &Provider) -> Web3;

    #[wasm_bindgen(static_method_of = Web3, getter)]
    fn givenProvider() -> Provider;

    type Provider;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64851681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档