pnpr: رجیستری npm اختصاصی، نوشتهشده با Rust
خلاصهٔ کاملتر
تو مستندات pnpm اومده که pnpr یه سرور رجیستری npm هست که با Rust نوشته شده. چون پروتکل رجیستری npm رو حرف میزنه، هر کلاینت سازگاری مثل pnpm و npm و yarn میتونه بهش وصل شه. نقشش تقریباً همونیه که verdaccio تو اکوسیستم جاوااسکریپت داره: میزبانی پکیجهای خودت، بهعلاوهٔ پراکسی کردن رجیستریهای بالادست مثل registry.npmjs.org، با احراز هویت و کنترل دسترسی خودش.
چهار کاربرد براش شمرده شده. رجیستری خصوصی با قواعد دسترسی و انتشار برای هر پکیج؛ پراکسی کش که یه رجیستری بالادست رو آینه میکنه تا نصبها سریعتر بشن و قطعی سمت بالادست کارت رو نخوابونه؛ و دروازهٔ اعتبارنامه که یه توکن بالادست رو سمت سرور نگه میداره و کل تیم از طریق احراز هویت خود pnpr ازش استفاده میکنن، بدون اینکه دست کسی به توکن اصلی برسه.
کاربرد چهارم شتابدهندهٔ نصبه: pnpr گراف وابستگی پروژه رو سمت سرور resolve میکنه و یه lockfile آماده تحویل pnpm میده. نکتهٔ امنیتی جالبش هم معماری مسیریابیشه؛ هر origin یه رجیستری اعلامشدهست که میگه چه اسم پکیجهایی رو سرو میکنه و یه روتر هر اسم رو دقیقاً به یه origin میرسونه. چون هیچ عبوری بین originها وجود نداره، حملهٔ dependency confusion از پایه بسته میشه.
دو تا هشدار هم داره. اول اینکه pnpr آزمایشیه و هنوز در حال توسعهٔ فعاله، پس رفتار و پیکربندی و APIهاش ممکنه بین نسخهها عوض شن. دوم اینکه برخلاف بقیهٔ مونوریپوی pnpm که MIT هست، این یکی source-available حساب میشه نه متنباز؛ لایسنس PolyForm Shield 1.0.0 اجازه میده اجرا و تغییر و self-host کنی، ولی نمیتونی باهاش محصولی بسازی که رقیب خودش باشه.
یه نکتهٔ دیگه اینکه pnpr محصولی جدا از CLI خود pnpm هست و هرکدوم بدون اون یکی هم کار میکنن؛ فقط برای هم طراحی شدن. کد pnpr هم داخل همون مونوریپوی pnpm زیر پوشهٔ pnpr/ نگهداری میشه.
نکات کلیدی:
- pnpr با Rust نوشته شده و داخل مونوریپوی pnpm زیر پوشهٔ pnpr/ قرار داره.
- با هر کلاینت سازگار با پروتکل رجیستری npm کار میکنه: pnpm، npm و yarn.
- روتر هر اسم پکیج رو فقط به یه origin میرسونه، پس dependency confusion ممکن نیست.
- محصولی جدا از CLI خود pnpm هست، ولی میتونه resolve وابستگی رو از دوشش برداره.
- لایسنس PolyForm Shield 1.0.0؛ تنها بخش غیر-MIT مونوریپوی pnpm.




