pnpm 12: حالا Yarn و Bun رو هم خودش نصب میکنه
خلاصهٔ کاملتر
تیم pnpm نسخهٔ 12 رو منتشر کرده و تو یادداشت انتشار، بزرگترین خبر اینه که pnpm دیگه فقط خودش رو نصب نمیکنه: حالا npm، Yarn Classic، Yarn Berry، Yarn 6 و Bun رو هم از رجیستریهای معتبر پکیجمنیجرها میگیره و قبل از اجرا امضای همون نسخهٔ دقیق رو تأیید میکنه. نتیجهش اینه که یه ریپازیتوری که با Yarn ساخته شده، روی ماشینی که فقط pnpm داره هم نصب میشه.
این قابلیت سه جا خودش رو نشون میده: وابستگیهای گیت با همون پکیجمنیجری آماده میشن که خودشون pin کردن، pnpm shim add yarn یه دستور yarn میسازه که همیشه نسخهٔ pinشدهٔ پروژه رو اجرا میکنه، و pnpm dlx (همون pnx) میتونه یه نسخهٔ مشخص رو فقط برای یه دستور بیاره:
pnx yarn@4 install
pnx npm@11 ci
pnx bun@1.3.0 installقبلاً pnx yarn@4 شکست میخورد، چون Yarn 4 با اسم @yarnpkg/cli-dist منتشر میشه نه yarn. تغییر بزرگ بعدی دربارهٔ تعیینپذیریه، یعنی اینکه خروجی هر بار دقیقاً یکی باشه: شکستن حلقههای وابستگی موقع peer resolution (مرحلهای که pnpm تصمیم میگیره هر peer dependency به کدوم نسخه وصل بشه) حالا کانونیک انجام میشه. اعضای هر حلقه بر اساس id مرتب میشن و همون یالی که حلقه رو میبنده، همیشه از یه جای ثابت بریده میشه.
قبلاً محل این برش به مسیر پیمایش بستگی داشت، پس نصب همون وابستگیها با ترتیب متفاوت importerها میتونست لاکفایل متفاوت بده. حالا لاکفایل تابعی خالص از گراف وابستگیه و نصبهای تکراری خروجی بایتبهبایت یکسان میدن. روی ورکاسپیسهای پرحلقه، peer resolution دو تا سه برابر سریعتره، حدود 25% حافظهٔ کمتری میخواد و لاکفایل کوچیکتری میسازه. لاکفایلهای قدیمی هم کار میکنن و فقط اولین نصبی که واقعاً دوباره resolve میکنه، یه بار کلیدها رو بازنویسی میکنه.
وابستگیهای گیت روی هاستهای شناختهشده (GitHub، GitLab، Bitbucket) دیگه به عنوان هویت دیده میشن نه انتخاب مسیر انتقال: همهٔ شکلهای نوشتن یه ریپو به آدرس HTTPS کانونیک همون هاست میرسن و لاکفایل هیچوقت آدرس SSH ثبت نمیکنه. این دقیقاً همون چیزیه که قبلاً روی رانرهای CI بدون کلید SSH میشکست. برای ریپوی خصوصی، بازنویسی آدرس رو با تنظیمات خود git روی ماشین انجام میدی، نه تو پروژه.
چند تغییر کوچیکتر هم هست: کلید ناشناخته تو pnpm-workspace.yaml دیگه بیصدا نادیده گرفته نمیشه و با ERR_PNPM_UNRECOGNIZED_WORKSPACE_SETTINGS گزارش میشه، packageImportMethod: auto روی لینوکس اول hardlink رو امتحان میکنه (روی btrfs تقریباً نصف شدن زمان ساختن node_modules از استور گرم)، و اجرای pnpm setup یا pnpm add -g با sudo حالا با ERR_PNPM_SUDO_NOT_SUPPORTED متوقف میشه، بهجای اینکه بیصدا روی هوم کاربر root کار کنه.
نکات کلیدی:
- pnpm 12 خودِ npm، Yarn Classic/Berry/6 و Bun رو نصب و امضاشون رو تأیید میکنه
- pnx yarn@4 install حالا واقعاً Yarn 4 رو میاره، نه پکیج npm هماسمش
- با شکستن کانونیک حلقهها، لاکفایل تابعی خالص از گراف وابستگیه و هر بار بایتبهبایت یکیه
- peer resolution روی ورکاسپیسهای پرحلقه 2 تا 3 برابر سریعتر و حدود 25% کمحافظهتر شده
- وابستگی گیت همیشه با HTTPS کانونیک ثبت میشه، پس CI بدون کلید SSH نمیشکنه
- کلید ناشناخته تو pnpm-workspace.yaml با ERR_PNPM_UNRECOGNIZED_WORKSPACE_SETTINGS رد میشه




