防锈/ WASM:模块未找到:错误:无法解析“ENV”在

问题描述 投票:1回答:1

我想端口wrapper for this crate到WASM。我现在的工具链是:

  • WASM包
  • 的WebPack
  • WASM-的BindGen

在构建系统上多一点信息:

在我的防锈箱(这是一个--lib箱),我只能打电话wasm-pack build --target browser。这将创建一个包含WASM斑点和相关的js文件夹pkg。从这里编译没有怨言。

然后,里面pkg,我跑npm link(只有一次)。

然后,cargo generate --git https://github.com/rustwasm/wasm-pack-template创建所需的web应用程序的样板。此命令生成的文件夹里,我跑npm link schnorrkel-js使其可见。 npm run start运行的WebPack开发服务器。

最初的测试样结合简单的计算功能和警觉做工精细。

当我开始使用来自提到的板条箱(example)一些(不适用)功能所需的一切打破。不幸的是,我得到的错误信息是完全是非知识性和不利于在所有:

Entrypoint main = bootstrap.js
[../pkg/schnorrkel_js.js] 3.53 KiB {0} [built]
[../pkg/schnorrkel_js_bg.wasm] 93.7 KiB {0} [built]
    + 27 hidden modules

ERROR in ../pkg/schnorrkel_js_bg.wasm
Module not found: Error: Can't resolve 'env' in '.../schnorrkel-js/pkg'
 @ ../pkg/schnorrkel_js_bg.wasm
 @ ../pkg/schnorrkel_js.js
 @ ./index.js
 @ ./bootstrap.js
 @ multi (webpack)-dev-server/client?http://localhost:8080 ./bootstrap.js

是什么原因呢?我有一个强烈的猜测,一些潜在的功能是不能移植到WASM但哪一个确切的,为什么,什么想说的错误消息?


笔记:

  • 我公司采用最新防锈nightly版本(rustc 1.34.0-nightly (d17318011 2019-02-07)
  • 的设置步骤其余直接从Rust and Webassembly book服用。
  • Cargo.toml
[package]
name = "schnorrkel-js"
edition = "2018"

[lib]
crate-type = ["cdylib"]

[dependencies]
wasm-bindgen = "0.2"
schnorrkel = { git = "https://github.com/w3f/schnorrkel.git" }

示例代码:

#[wasm_bindgen] 
pub fn verify(signature: &[u8], message: &[u8], pubkey: &[u8]) -> bool {
    let sig = match Signature::from_bytes(signature) {
        Ok(some_sig) => some_sig,
        Err(_) => return false
    };
    let pk = match PublicKey::from_bytes(pubkey) {
        Ok(some_pk) => some_pk,
        Err(_) => return false
    };

    // works up until here if I return a boolean. 
    // calling this breaks everything.
    pk.verify_simple(SIGNING_CTX, message, &sig)
}

webpack rust webassembly wasm-bindgen
1个回答
2
投票

它看起来像这可能是由clear_on_drop依赖使用的C代码的问题,因为提到here

尝试启用对qazxsw POI创建,这反过来又使上nightly禁用C.它的使用在您schnorrkelnightly特征qazxsw POI功能:

clear_on_drop

另外,您也可以使用Cargo.toml(有[dependencies] wasm-bindgen = "0.2" schnorrkel = { git = "https://github.com/w3f/schnorrkel.git", features = ["nightly"] } )在编译的二进制wasm2wat检查其an online version导入失败。

© www.soinside.com 2019 - 2024. All rights reserved.