چرا Drizzle ORM یک ماه نتونست نسخهی جدید منتشر کنه
خلاصهٔ کاملتر
چهارم ژوئن تیم Drizzle ORM اعلام کرد که دیگه نمیتونه نسخهی جدیدی روی npm منتشر کنه، چون به سقف ۱۰۰ مگابایتی چیزی به اسم «packument» خورده. این مقالهی Evert Pot تو وبلاگ vlt توضیح میده این سقف چیه، از کجا اومده و چطور میشه ازش دوری کرد.
اول باید فرق manifest و packument روشن بشه. وقتی npm publish میزنین، کلاینت یه شیء JSON بزرگ شامل کپی package.json، تاربال base64 شده و مقداری متادیتا به رجیستری میفرسته. رجیستری همون package.json رو با متادیتای امنیتی و غیره غنی میکنه و اسمش رو میذاره مانیفستِ اون نسخه. مانیفست یه ریلیز Drizzle حدود ۱۳۱ کیلوبایت ـه — که به گفتهی نویسنده یکی از بزرگترینهاییه که دیده — چون Drizzle کلی export مجزای ESM داره.
پکیومنت اما میراث دورانیه که npm روی CouchDB ساخته شده بود: یه سند واحد که متادیتای کل پکیج و همهی نسخههاش رو یکجا داره، تا CLI بتونه ببینه چه نسخههایی موجوده. رجیستری خودش این سند رو بهروز نگه میداره و در عمل مانیفست هر نسخهای که تا حالا منتشر شده توش هست. برای مقایسه، پکیومنت React با ۲٬۸۴۱ نسخه حدود ۶ مگابایته.
حالا حساب کتاب سادهست: چون پکیومنت موقع هر نصب تازه (یعنی وقتی از lockfile نمیخونین) کامل دانلود میشه، رجیستری براش سقف ۱۰۰ مگابایت (قبل از فشردهسازی) گذاشته. با ۱۳۱ کیلوبایت به ازای هر ریلیز، حدود ۷۶۳ نسخه کافیه تا سقف پر بشه — و Drizzle تازگی شروع کرده بود به انتشار خودکار اسنپشات از روی کامیتهای گیت، که کار رو خیلی سریعتر به بنبست رسوند. بعد از پر شدن سقف، رجیستری هر انتشار جدید رو رد میکنه.
راه فرار هم بسته بود: npm حالا حذف نسخه رو بعد از ۷۲ ساعت از انتشار ممنوع کرده تا امنیت و پایداری اکوسیستم حفظ بشه. پس تنها گزینهی Drizzle این بود که با تیم کوچیک و کمنیروی npm تو گیتهاب تماس بگیره تا نسخههای قدیمی رو از طرفشون پاک کنن — و همین چند هفته طول کشید.
توصیهی نویسنده روشنه: بیلدهای dev رو روی رجیستری عمومی منتشر نکنین. کاربرهاتون هیچوقت سراغشون نمیرن، ولی برای همیشه به حجم دانلود هر نصب تازه اضافه میشن؛ هم کنده، هم اسراف. برای این کار رجیستری خصوصی یا جایگزین بهتره. اگه package.json بزرگی دارین هم بهتره حجم پکیومنتتون رو (با گرفتن آدرس پکیج از رجیستری و اندازهگیری حجم پاسخ) رصد کنین تا قبل از پر شدن سقف کاری بکنین.
در آخر یه پیشنهاد اصلاحی هم میده: کاش کلاینتها میتونستن به رجیستری بگن فقط نسخههای پایدار یا یه بازهی مشخص رو میخوان؛ این با یه query parameter و سازگار با گذشته شدنیه و پهنای باند نصبها رو حسابی کم میکنه. خود vlt تو میرور npm ـش از یه allow-list استفاده کرده و فقط چیزی رو به پکیومنت اضافه میکنه که برای نصب لازمه — نتیجه اینکه Drizzle اونجا فعلاً فقط ۱.۷ مگابایته، در برابر ۶۱ مگابایت روی رجیستری اصلی.
نکات کلیدی:
- پکیومنت = یه سند واحد با متادیتای همهی نسخههای یه پکیج؛ سقفش ۱۰۰ مگابایت قبل از فشردهسازیه
- مانیفست هر ریلیز Drizzle حدود ۱۳۱ کیلوبایته، پس ~۷۶۳ نسخه برای پر کردن سقف کافیه
- انتشار خودکار اسنپشات از روی کامیتها، پر شدن سقف رو خیلی سریعتر کرد
- حذف نسخه بعد از ۷۲ ساعت ممنوعه، پس فقط تیم npm میتونست پاکسازی کنه
- توصیه: بیلدهای dev رو روی رجیستری عمومی نفرستین و حجم پکیومنت رو رصد کنین




