Dlaczego konwertować WASM na JS?
Plik binarny .wasm nie może działać na stronie samodzielnie - przeglądarki ładują go poprzez JavaScript. Ludzie potrzebują pliku .js, aby móc zaimportować moduł, przekazać importy i wywoływać jego wyeksportowane funkcje jak zwykłe funkcje. Toolchainy generują ten kod łączący, więc rzadko dotyka się surowego kodu ładującego.
Jak przekonwertować WASM na JS
Wyjście glue z Emscripten OPEN-SOURCE
Podczas kompilacji C/C++, uruchom emcc app.c -o app.js, a Emscripten wygeneruje zarówno app.wasm, jak i ładowarkę app.js, która go instancjonuje. Dodaj -s MODULARIZE=1 dla modułu importowalnego.
wasm-pack dla Rust OPEN-SOURCE
Dla Rust + wasm-bindgen, uruchom wasm-pack build --target web; wyprodukuje to plik .wasm oraz plik powiązań .js, który reeksportuje każdą funkcję. Zaimportuj go w swojej aplikacji za pomocą init().
O tych formatach
Plik .wasm zawiera skompilowany moduł WebAssembly: przenośny binarny kod bajtowy (bytecode) wygenerowany z języków takich jak C, C++ lub Rust, który działa z prędkością zbliżoną do…
Otwórz szczegóły .WASM →Plik JS to plik kodu źródłowego JavaScript - zwykły, czytelny tekst, który napędza interaktywność stron internetowych i aplikacje serwerowe poprzez Node.js. Można go otworzyć w dowolnym…
Otwórz szczegóły .JS →Jakość i na co uważać
- Plik
.jsnie zawiera logiki modułu - jedynie ładuje i pośredniczy w komunikacji z.wasm, który musi być dostarczony wraz z nim. - Ręcznie pisane ładowarki muszą dostarczyć dokładnie taki obiekt importów, jakiego oczekuje moduł, inaczej instancjonowanie wyrzuci błąd LinkError.
- Kod łączący z Emscripten/wasm-bindgen jest powiązany z konkretną kompilacją, która wytworzyła
.wasm; mieszanie wersji psuje powiązania.
Najczęściej zadawane pytania
Czy mogę w pełni zamienić WASM z powrotem na czytelny JavaScript?
Czy po wygenerowaniu .js nadal potrzebuję pliku .wasm?
.js pobiera i instancjonuje .wasm w czasie wykonywania; oba muszą być wdrożone razem.Której flagi target powinien używać wasm-pack?
--target web dla natywnych modułów ES, --target bundler dla webpack/Vite, --target nodejs dla Node.