¿Por qué convertir WASM a JS?
Un binario .wasm no puede ejecutarse en una página por sí solo -los navegadores lo cargan a través de JavaScript. Los usuarios quieren un archivo .js para poder importar el módulo, pasar importaciones y llamar a sus funciones exportadas como funciones normales. Las cadenas de herramientas generan este enlace para que rara vez tenga que tocar el código de carga sin procesar.
Cómo convertir WASM a JS
Salida de enlace de Emscripten OPEN-SOURCE
Al compilar C/C++, ejecute emcc app.c -o app.js y Emscripten emitirá tanto app.wasm como el cargador app.js que lo instancia. Añada -s MODULARIZE=1 para un módulo importable.
wasm-pack para Rust OPEN-SOURCE
Para Rust + wasm-bindgen, ejecute wasm-pack build --target web; esto produce el .wasm más un archivo de vinculación .js que reexporta cada función. Impórtelo desde su aplicación con init().
Acerca de estos formatos
Un archivo .wasm contiene un módulo de WebAssembly compilado: un código de bytes (bytecode) binario portátil producido a partir de lenguajes como C, C++ o Rust que se ejecuta a una…
Abrir detalles de .WASM →Un archivo JS es un archivo de código fuente JavaScript: texto plano y legible que potencia la interactividad de las páginas web y las aplicaciones de servidor mediante Node.js. Ábralo en…
Abrir detalles de .JS →Calidad y qué observar
- El archivo
.jsno contiene la lógica del módulo -solo carga y sirve de puente para el.wasm, que debe distribuirse junto a él. - Los cargadores escritos a mano deben suministrar el objeto de importaciones exacto que el módulo espera, o la instanciación lanzará un LinkError.
- El enlace de Emscripten/wasm-bindgen está ligado a la compilación exacta que produjo el
.wasm; mezclar versiones rompe las vinculaciones.
Preguntas frecuentes
¿Puedo convertir WASM totalmente de nuevo a JavaScript legible?
¿Sigo necesitando el archivo .wasm después de generar el .js?
.js obtiene e instancia el .wasm en tiempo de ejecución; ambos deben desplegarse juntos.¿Qué flag de destino (target) debería usar wasm-pack?
--target web para módulos ES nativos, --target bundler para webpack/Vite, --target nodejs para Node.