unwasm: وباسمبلی رو مثل یه ماژول معمولی ایمپورت کن
خلاصهٔ کاملتر
تو مستندات unwasm اومده که هدفش یه راه مشترک و آیندهنگر برای پشتیبانی از ماژولهای WebAssembly تو رانتایمها، فریمورکها و ابزارهای بیلد جاوااسکریپته. تیم unjs پیشنهاد ESM Integration کامیونیتی WebAssembly رو تا جایی که میتونسته دنبال کرده، ولی حواسش به سازگاری با کتابخونههای امروزی هم بوده.
ایدهٔ اصلی سادهست: فایل .wasm رو مثل هر ماژول دیگهای ایمپورت میکنی و unwasm سر بیلد اون رو resolve و پارس میکنه تا بفهمه چی ایمپورت و چی اکسپورت میکنه، بعد بایندینگ مناسبِ باندلر تو رو میسازه:
import { sum } from "sum.wasm";شکل این بایندینگ به محیط بستگی داره. اگه محیط از top-level await پشتیبانی کنه و ماژول به imports object احتیاج نداشته باشه (یا unwasm بتونه خودش پیداش کنه)، فایل .wasm عین یه ایمپورت معمولی ESM رفتار میکنه. وگرنه — یا اگه گزینهٔ lazy رو روشن کنی — یه Proxy تحویلت میده که مثل تابع صداش میزنی و ماژول فقط وقتی لازم شد با importهای خودت مقدار میگیره.
چند ابزار جانبی هم داره: با پسوند ?module میتونی فایل رو مستقیم بهشکل WebAssembly.Module بگیری، مناسب کتابخونههایی که خودشون Instance میسازن. تابع parseWasm هم یه خوانندهٔ کوچیک و بدون وابستگیه که فقط سکشنهای مربوط به اینترفیس ماژول رو دیکد میکنه و لیست importها و exportها رو میده.
برای importهایی که ماژول لازم داره، unwasm میتونه خودش با import maps حدسشون بزنه و باندلشون کنه؛ کافیه تو package.json والد اونها رو تو کلید imports معرفی کنی (اسمها رو با # هم میتونی بنویسی تا با قواعد Node.js جور باشه). فعلاً یکپارچگی از طریق پلاگین Rollup انجام میشه و دو گزینهٔ esmImport و lazy داره — اولی روی Cloudflare Workers لازمه.
نکات کلیدی:
- ایمپورت مستقیم فایل .wasm مثل یه ماژول معمولی، با بایندینگ خودکار سر بیلد
- بایندینگ استاتیک وقتی top-level await هست، وگرنه پروکسی تنبل
- پسوند ?module برای کتابخونههایی که خودشون WebAssembly.Module میخوان
- حدس زدن imports با import maps از روی package.json
- فعلاً پلاگین Rollup، با گزینههای esmImport (برای Cloudflare Workers) و lazy




