کلودفلر رجیستری ماژول ورکرز رو بازنویسی کرد
خلاصهٔ کاملتر
برای سالها، کلودفلر پشتیبانی APIهای Node.js رو توی Workers قدمبهقدم اضافه کرده و الان تقریباً هر API پایدار Node.js همینجا در دسترسه؛ این APIها هم بهطور پیشفرض روشنن و حجم مجاز باندل تا ۶۴ مگابایت روی همهی پلنها بالا رفته. ولی سازگاری API بهتنهایی کافی نیست: اپهای Node.js به نحوهی resolve و load و کشکردن ماژولها هم وابستهن، و این دقیقاً کار «رجیستری ماژول»ـه.
رجیستری قدیمی، اسپسیفایرها رو مثل مسیر فایلسیستم میخوند، نه URL. همین باعث میشد import.meta.url اصلاً کار نکنه، ایمپورتهای نسبی با قوانین new URL() یکی نباشن و پروتکلهایی مثل node: و cloudflare: بهجای رفتار مثل یه پروتکل واقعی، فقط پیشوندهای رشتهای خاص باشن. رجیستری قدیمی کل باندل رو هم از اول کامپایل میکرد، حتی اگه یه ماژول هیچوقت ایمپورت نمیشد، و برای هر ایزولهی V8 یه کپی جدا نگه میداشت.
رجیستری جدید که پشت پرچم سازگاری new_module_registry قرار داره، اسپسیفایرها رو از اول بهشکل URL میبینه:
{
"compatibility_flags": ["new_module_registry"]
}با این فلگ، import.meta.url و import.meta.resolve() درست جواب میدن، حتی query string و fragment هم باعث میشن یه فایل به دو نمونهی جدای ماژول تبدیل بشه که هر کدوم state بالای فایل خودشو داره. ماژولها هم فقط وقتی واقعاً ایمپورت میشن کامپایل میشن، نه از قبل.
require() روی یه ماژول ESM هم حالا دقیقاً طبق قانون require(esm) خود Node.js عمل میکنه: اگه ماژول یه export به اسم 'module.exports' داشته باشه همونو برمیگردونه، وگرنه namespace object رو میده. اگه ماژول یا هرچیزی توی گراف وارداتیش top-level await داشته باشه، require() بهجای بلاکشدن یا برگردوندن یه چیز نصفهکاره، ارور میده.
خطاها هم فارغ از اینکه از import استاتیک، import() داینامیک یا require() اومده باشن، از یه کلاس و پیام یکسان استفاده میکنن. یه قابلیت تازهی دیگه هم source phase import برای WebAssemblyـه؛ میشه فرم کامپایلشده ولی instantiateنشدهی یه ماژول wasm رو مستقیم گرفت.
نکات کلیدی:
- فعالسازی با کامپتفلگ new_module_registry، بدون تاریخ پیشفرض روشنشدن خودکار
- import.meta.url و import.meta.resolve() حالا مطابق استاندارد کار میکنن
- require() روی ماژول ESM از قانون require(esm) خود Node.js پیروی میکنه
- سقف حجم Worker تا ۶۴ مگابایت روی همهی پلنها بالا رفته
- WebAssembly حالا از source phase imports پشتیبانی میکنه




