我正在开发一个使用Rust和wasm-pack编译的节点JS包,我需要在代码中发出HTTP请求。我尝试使用reqwest库,所以在测试中一切都很好,但是我在打包时出错了。
#![allow(non_snake_case)]
use reqwest;
use wasm_bindgen::prelude::*;
// function
#[wasm_bindgen]
pub fn makeGetRequest(url: &str) -> String {
let mut resp = reqwest::get(url).unwrap();
resp.text().unwrap()
}
// test
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_makeGetRequest() {
let url = "https://stackoverflow.com/";
let body = makeGetRequest(url);
assert!(body.len() > 0);
}
}配置Cargo.toml
...
[lib]
crate-type = ["cdylib"]
[dependencies]
wasm-bindgen = "0.2"
reqwest = "0.9"我用命令打包该项目:
wasm-pack build --release --target nodejs我得到了一个错误:
...
error: could not compile `net2`我发现net2在wasm-pack中看起来不受支持,所以我可能不能在我的例子中使用reqwest:net2
是否有一种方法可以成功地使用wasm-pack进行同步HTTP请求打包?
发布于 2021-02-27 19:37:28
它不会像您预期的那样容易工作: Wasm字节码是在受保护的环境中执行的,没有对操作系统特性(如磁盘、网络、常规随机生成器和任何其他类型的I/O )的访问,因此,当您使用这些特性编译任何使用这些特性的Rust代码时,它就无法工作。
不幸的是,您的代码(例如文件访问)通常甚至在运行时默默地编译,然后以神秘的方式失败。这并不是你习惯使用锈菌的习惯,也是当前魔咒锈栈的一个主要缺点。
要访问OS功能,您需要WASI (Wasm系统接口)作为扩展。要在NodeJs中启用Wasi,可以使用类似于WasmerJs的内容,例如这篇文章提供了一个简短的摘要。
https://stackoverflow.com/questions/66397775
复制相似问题