pnpm ۱۲: نسخه Rust با ۵ تغییر کلیدی
خلاصهٔ کاملتر
pnpm نسخه ۱۲ رو به صورت ریلیز کاندید (یعنی نسخهای که برای تست نهایی قبل از انتشار رسمی منتشر میشه) بیرون داده و طبق پست بلاگ رسمیش، این نسخه یه بازنویسی کامل با Rustـه. نکته مهم اینه که این یه مهاجرت نیست: دستورها، فلگها، تنظیمات و فرمت lockfile دقیقاً همونیان که تو pnpm 11 بودن و مستندات فعلی برای هر دو نسخه معتبره. فقط پنج جا رفتار عوض شده که یکیشون - حذف یه فلگ - بهجای تغییر رفتار، مستقیم خطا میده.
اولین تفاوت به global bins مربوطه: اگه node، deno یا bun رو سراسری (global) نصب کرده باشی، از این به بعد وقتی داخل یه پروژه هستی که نسخه خاصی از این رانتایمها رو پین کرده (چه از طریق devEngines.runtime تو package.json چه با نصبش بهعنوان یه dependency)، دستور از همون نسخه پینشده استفاده میکنه؛ بیرون از پروژه هم همون نسخه سراسری قبلی کار میکنه. یعنی دیگه لازم نیست یه ابزار مدیریت نسخه جدا نصب کنی. این رفتار با تنظیم globalShims کنترل میشه.
دومی به resolve شدن dependencyهای گیت مربوطه. برای مخزنهای روی GitHub، GitLab و Bitbucket، نوشتن specifier به شکل github:owner/repo یا git+ssh از این به بعد یکی حساب میشه و همیشه از URL کنونیکال HTTPS استفاده میشه، نه SSH. تو pnpm 11 گاهی یه URL از نوع git@github.com ثبت میشد که رو CI runnerهای بدون کلید SSH خراب میشد؛ الان این اتفاق نمیافته. اگه لاکفایل قدیمی همچین ورودیای داره، باید یهبار با pnpm update دوباره resolveش کنی.
سومی اینه که pnpm 12 حالا خود npm، Yarn Classic، Yarn Berry، Yarn 6 و Bun رو هم نصب میکنه، پس اسم بردن از یکیشون یعنی خود همون ابزار، نه پکیج npmی که اسمش رو داره. مثلاً pnpm add -g yarn قبلاً Yarn Classic رو نصب میکرد ولی الان خط فعلی Yarn رو میگیره، و pnpm add -g node یا deno بهجای یه پکیج wrapper، خود همون ریلیز Node.js یا Deno رو نصب میکنه.
چهارمی به lockfile پروژههایی مربوطه که dependencyهاشون حلقه (cycle) دارن: pnpm این حلقهها رو همیشه تو یه نقطه ثابت (بر اساس ID پکیج) میشکنه، نه هر جایی که موقع نصب بهش برخورد کنه. نتیجهاش اینه که لاکفایل فقط تابعی از گراف dependencyهاست و ترتیب نصب دیگه روش اثر نمیذاره. پروژههای پر از حلقه هم ۲ تا ۳ برابر سریعتر peer resolve میشن، حدود ۲۵ درصد حافظه کمتر مصرف میکنن و لاکفایل کوچیکتری دارن؛ فقط اولین نصبی که دوباره resolve میکنه، یه دیف یهباره تو لاکفایل ایجاد میکنه.
آخرین مورد حذف فلگ --resolution-only ـه که دیگه پشتیبانی نمیشه و خطا میده؛ جایگزینش pnpm peers check ـه که مشکلات peer dependency رو مستقیم از لاکفایل میخونه، بدون نیاز به نصب یا resolve دوباره. این تنها تغییریه که بهجای عوض کردن نتیجه، بیلد CI رو میشکنه، پس بهتره قبل از آپدیت تو اسکریپتهات دنبالش بگردی. pnpm 12 فعلاً فقط با تگ next-12 رو npm و بهعنوان prerelease رو گیتهاب در دسترسه و هنوز رو Homebrew و امثالش نیومده.
نکات کلیدی:
- pnpm 12 یه بازنویسی کامل با Rustـه و فعلاً بهصورت release candidate منتشر شده؛ دستورها، فلگها و فرمت لاکفایل با نسخه ۱۱ یکیان.
- global بودن node/deno/bun حالا پروژهمحوره: تنظیم globalShims این رفتار رو کنترل میکنه.
- گیتدیپندنسیهای GitHub/GitLab/Bitbucket همیشه از HTTPS کنونیکال resolve میشن، نه SSH؛ لاکفایلهای قدیمی با pnpm update باید یهبار دوباره resolve بشن.
- pnpm 12 خود npm، Yarn (Classic/Berry/6) و Bun رو نصب میکنه، نه یه پکیج wrapper به همون اسم.
- لاکفایل پروژههای با dependency حلقهای الان دترمینیستیکه و peer resolve تا ۳ برابر سریعتره.
- فلگ --resolution-only حذف شده؛ جایگزینش pnpm peers check ـه.




