Estoy desarrollando un paquete NODE JS usando Rust y wasm-pack para compilar, y necesito realizar solicitudes HTTP en mi código. Traté de usar la biblioteca reqwest , por lo que todo funciona bien en la prueba, pero aparece un error al empaquetar.
#![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); } } Configuración Cargo.toml :
... [lib] crate-type = ["cdylib"] [dependencies] wasm-bindgen = "0.2" reqwest = "0.9"Empaco el proyecto con el comando:
wasm-pack build --release --target nodejsY me sale el error:
... error: could not compile `net2` Descubrí que parece que net2 no es compatible con wasm-pack , por lo que tal vez no pueda usar reqwest en mi caso: error de informe de compilación de wasm-pack: no se pudo compilar `net2`
¿Hay alguna forma de realizar solicitudes HTTP sincrónicas que se puedan empaquetar con wasm-pack correctamente?
No funcionará tan fácilmente como cabría esperar: el código de bytes WASM se ejecuta en un entorno protegido sin acceso a funciones del sistema operativo como disco, red, generadores aleatorios convencionales y cualquier otro tipo de E/S. En consecuencia, en el momento en que compile cualquier código de Rust utilizando dichas funciones en Wasm, no funcionará.
Desafortunadamente, su código (por ejemplo, el acceso a archivos) generalmente incluso se compila en silencio y luego falla de manera misteriosa durante el tiempo de ejecución. Esto no es a lo que te acostumbraste al usar Rust y es un gran inconveniente de la pila actual de Wasm Rust.
Para acceder a las funciones del sistema operativo, necesitará WASI (Interfaz del sistema Wasm) como una extensión. Para habilitar Wasi en NodeJs, puede usar algo como WasmerJs; consulte, por ejemplo,este artículo que proporciona un breve resumen para hacerlo.