Pourquoi convertir WASM en JS ?
Un binaire .wasm ne peut pas s'exécuter seul dans une page - les navigateurs le chargent via JavaScript. Les utilisateurs veulent un fichier .js pour pouvoir importer le module, passer des imports et appeler ses fonctions exportées comme des fonctions normales. Les chaînes d'outils génèrent ce code de liaison pour que vous ayez rarement à toucher au code de chargement brut.
Comment convertir WASM en JS
Sortie de liaison Emscripten OPEN-SOURCE
Lors de la compilation de C/C++, exécutez emcc app.c -o app.js et Emscripten émet à la fois app.wasm et le chargeur app.js qui l'instancie. Ajoutez -s MODULARIZE=1 pour un module importable.
wasm-pack pour Rust OPEN-SOURCE
Pour Rust + wasm-bindgen, exécutez wasm-pack build --target web ; cela produit le .wasm plus un fichier de liaison .js qui réexporte chaque fonction. Importez-le depuis votre application avec init().
À propos de ces formats
Un fichier .wasm contient un module WebAssembly compilé : un bytecode binaire portable produit à partir de langages comme C, C++ ou Rust et exécuté à une vitesse proche du natif. La plupart…
Ouvrir les détails de .WASM →Un fichier JS est un fichier de code source JavaScript - un texte brut et lisible qui alimente l'interactivité des pages web et les applications côté serveur via Node.js. Ouvrez-le dans…
Ouvrir les détails de .JS →Qualité et points de vigilance
- Le fichier
.jsne contient pas la logique du module - il ne fait que charger et faire le pont avec le.wasm, qui doit être livré à ses côtés. - Les chargeurs écrits à la main doivent fournir l'objet d'imports exact attendu par le module, sinon l'instanciation lève une erreur LinkError.
- Le code de liaison Emscripten/wasm-bindgen est lié à la version exacte de la compilation qui a produit le
.wasm; mélanger les versions casse les liaisons.
Foire aux questions
Puis-je transformer entièrement WASM en JavaScript lisible ?
Ai-je toujours besoin du fichier .wasm après avoir généré le .js ?
.js récupère et instancie le .wasm au moment de l'exécution ; les deux doivent être déployés ensemble.Quel drapeau de cible wasm-pack doit-il utiliser ?
--target web pour les modules ES natifs, --target bundler pour webpack/Vite, --target nodejs pour Node.