Nub لیست وابستگیهای اعلامنشدهٔ npm رو پنج برابر کرد
خلاصهٔ کاملتر
تیم Nub با ابزار داخلی پکیجمنیجرش، ده هزار پکیج پردانلود npm رو دنبال phantom dependency گشته (یعنی پکیجی که چیزی رو import میکنه ولی تو package.json خودش اعلامش نکرده). نتیجه یه دیتابیس ۷۹۱ پکیجیه که با اسم @nubjs/extensions منتشر شده. ۶۴۹ تاش تو @yarnpkg/extensions نبودن، همون لیستی که الان زیربنای global virtual store تو pnpm v12 و Aube هست.
مشکل از اینجا میاد که npm و Yarn پکیجها رو صاف کنار هم تو node_modules میچینن. پس اگه یه پکیج وابستگیش رو اعلام نکنه، باز هم احتمالاً پیداش میکنه و کسی متوجه نمیشه. ولی pnpm، Nub و پکیجمنیجرهای جدیدتر هر پکیج رو ایزوله میکنن تا فضای دیسک کمتری بگیره. اینجاست که همون اشتباههای قدیمی به شکل خطای ERR_MODULE_NOT_FOUND بیرون میان.
Yarn وقتی با Plug'n'Play به همین مشکل خورد، یه لیست دستی ساخت که میگه کدوم پکیج چه وابستگی اعلامنشدهای داره. به گفتهٔ تیم Nub، این لیست خیلی ناقصه و تو سه سال اخیر فقط چند بار آپدیت شده. Bun 1.4 هم یه global virtual store اختیاری آورده، ولی اصلاً این وصلهها رو نداره. یعنی ممکنه نصب موفق باشه و برنامه موقع اجرا با MODULE_NOT_FOUND بخوابه.
همهٔ این موارد به یه اندازه خطرناک نیستن. ۳۴۱ پکیج فقط تو فایلهای .d.ts چیزی رو import میکنن و موقع type-check خطای TS2307 میدن. ۱۱۴ تا import رو تو try/catch گذاشتن و فقط یه قابلیت اختیاری خاموش میشه. ۱۰۱ تا یه peer فریمورکی مثل react یا typescript رو اعلام نکردن. ۱۰۴ تا هم واقعاً یه وابستگی رو یادشون رفته و ۲۵ موردش زیر Yarn Plug'n'Play واقعاً خطا داده.
هر مورد بهصورت یه optional peer ثبت شده که خودش چیزی نصب نمیکنه، به جز همون ۲۵ مورد که بهعنوان dependencies اضافه شدن. بعضی قانونها هم فقط برای نسخههای قدیمیان، مثلاً redux-thunk تا نسخهٔ 2.3.0. اینها نگه داشته شدن چون lockfile ممکنه هنوز نسخهٔ قدیمی رو پین کرده باشه. ۹۵ پکیج از ۷۹۱ تا فقط با همین قانونهای قدیمی پوشش داده شدن.
به گفتهٔ تیم Nub، این پکیج جایگزین صددرصد سازگار لیست Yarn هست. همهٔ قانونهای Yarn حفظ شدن، فرمت خروجی packageExtensions همون آرایهٔ جفتهای [selector, extension] مونده و هم CommonJS هم ESM پشتیبانی میشه. لیست خودکار از طریق CI آپدیت میشه: رتبهبندی دانلود npm دورهای تازه میشه، هر روز نسخههای منتشرشده اسکن میشن و مواردی که با تحلیل ایستا پیدا نمیشن دستی اضافه میشن.
نکات کلیدی:
- @nubjs/extensions@1.0.4 شامل ۷۹۱ پکیجه، در مقابل ۱۴۲ پکیج تو @yarnpkg/extensions@2.0.7
- اسکن روی ده هزار پکیج پردانلود npm انجام شده
- ۱۰۴ پکیج وابستگی واقعی رو فراموش کردن و ۲۵ موردش زیر Yarn PnP خطای واقعی داده
- فرمت خروجی با لیست Yarn یکیه و ابزارهای دیگه با تغییر یه خط میتونن ازش استفاده کنن
- Bun 1.4 تو global virtual store خودش هیچ وصلهای برای این پکیجها نداره




