![](https://res.cloudinary.com/zenn/image/upload/s--ZHE6_B8j--/co_rgb:222%2Cg_south_west%2Cl_text:notosansjp-medium.otf_37_bold:Sosuke%2520Suzuki%2Cx_203%2Cy_98/c_fit%2Cco_rgb:222%2Cg_north_west%2Cl_text:notosansjp-medium.otf_65_bold:%25E3%2583%2596%25E3%2583%25A9%25E3%2582%25A6%25E3%2582%25B6%25E3%2581%258B%25E3%2582%2589%25E3%2582%2582Node.js%25E3%2581%258B%25E3%2582%2589%25E3%2582%2582%2520import%2520%25E3%2581%25A7%25E3%2581%258D%25E3%2582%258BWebAssembly%25E3%2583%25A9%25E3%2582%25A4%25E3%2583%2596%25E3%2583%25A9%25E3%2583%25AA%25E3%2582%2592%25E4%25BD%259C%25E3%2582%258B%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EtL0FPaDE0R2kzVm5WZHo2MC1CT3lMTS1VVnZaNmdNSDJlTlp1T0lTa1owT3lyNnc9czgwLWM=%2Cr_max%2Cw_90%2Cx_87%2Cy_72/v1627274783/default/og-base_z4sxah.png)
ブラウザからもNode.jsからも import できるWebAssemblyライブラリを作る
ARANK
WebAssembly というやつは便利で一度コンパイルしてしまえばブラウザでも Node.js でも実行できる。でも .wasm のファイルをどうやって読み込むのか、というのがブラウザと Node.js では違う。色々やり方はあると思うけど、一番素直なやり方を考えてみる。まずブラウザの場合は main.wasm みたいなファイルを適当な場所に配置しておいて fetch で内容を取得して WebAssembly.instantiate に食わせるとかになると思う。const response = await fetch("main.wasm"); const buf = await response.arrayBuffer(); const { instance } = await WebAssembly.instantiate(buf); こんな感じ。で、Node.jsの場合は main.wasm ファイルを fs.readFile とかで読み込んで WebAssembly.instantiate に食わせるとかになると思う。import fs from "node:fs/promises"; const buf = await fs.readFile(new URL("./main.wasm", import.meta.url)); const { instance } = await WebAssembly.instantiate(buf); こんな感じ。WebAssembly にコンパイルした何かを main.wasm として配置し、取得し、インスタンス化する、という流れは両方同じ。で、微妙に読み込み方が違うわけだけど、せっかくど…