Por que converter WASM para JS?
Um binário .wasm não pode rodar em uma página sozinho - os navegadores o carregam através de JavaScript. As pessoas querem um arquivo .js para poderem importar o módulo, passar importações e chamar suas funções exportadas como funções normais. As toolchains geram essa ligação para que você raramente toque no código de carregamento bruto.
Como converter WASM para JS
Saída de ligação do Emscripten OPEN-SOURCE
Ao compilar C/C++, execute emcc app.c -o app.js e o Emscripten emitirá tanto o app.wasm quanto o carregador app.js que o instancia. Adicione -s MODULARIZE=1 para um módulo importável.
wasm-pack para Rust OPEN-SOURCE
Para Rust + wasm-bindgen, execute wasm-pack build --target web; ele produz o .wasm mais um arquivo de vinculação .js que reexporta cada função. Importe-o do seu app com init().
Sobre estes formatos
Um arquivo .wasm contém um módulo WebAssembly compilado: um bytecode binário portátil produzido a partir de linguagens como C, C++ ou Rust e executado em velocidade próxima à nativa. A…
Abrir detalhes de .WASM →Um arquivo JS é um arquivo de código-fonte JavaScript - texto simples e legível que alimenta a interatividade de páginas web e aplicativos do lado do servidor via Node.js. Abra-o em…
Abrir detalhes de .JS →Qualidade e o que observar
- O arquivo
.jsnão contém a lógica do módulo - ele apenas carrega e faz a ponte com o.wasm, que deve ser enviado junto com ele. - Carregadores escritos à mão devem fornecer o objeto de importações exato que o módulo espera, caso contrário a instanciação lançará um LinkError.
- A ligação do Emscripten/wasm-bindgen está atada ao build exato que produziu o
.wasm; misturar versões quebra as vinculações.
Perguntas frequentes
Posso transformar o WASM totalmente de volta em JavaScript legível?
Ainda preciso do arquivo .wasm após gerar o .js?
.js busca e instancia o .wasm em tempo de execução; ambos devem ser implantados juntos.Qual flag de target o wasm-pack deve usar?
--target web para módulos ES nativos, --target bundler para webpack/Vite, --target nodejs para Node.