pnpm 11 رسید: امنیت بیشتر، SQLite، و خداحافظی با npm CLI
خلاصهٔ کاملتر
pnpm 11 یه نسخهی بزرگ و شکنندهست که تمیزکاریهای مهمی روی معماری و پیکربندی این پکیجمنیجر انجام داده. اول از همه: Node.js 18، 19، 20 و 21 دیگه پشتیبانی نمیشن و حداقل باید Node 22 داشته باشی. pnpm خودش هم الان pure ESM هست.
امنیت پیشفرض سفتتر شده. مقدار minimumReleaseAge حالا ۱۴۴۰ دقیقه (یعنی ۱ روز) هست — پکیجهایی که تازه منتشر شدن تا ۲۴ ساعت resolve نمیشن تا از حملات supply-chain جلوگیری بشه. blockExoticSubdeps هم بهصورت پیشفرض true شده.
یه تغییر مهم دیگه یکپارچهسازی تنظیمات build هست. گزینههای قدیمی مثل onlyBuiltDependencies، neverBuiltDependencies و ignoredBuiltDependencies حذف شدن و جاشون رو allowBuilds گرفته؛ یه مپ ساده از اسم پکیج به true یا false:
allowBuilds:
electron: true
core-js: false
esbuild: falsestore حالا روی SQLite کار میکنه (نسخهی v11). قبلاً ایندکس store از فایلهای JSON جداگانه برای هر پکیج تشکیل میشد که syscall زیادی میخورد؛ حالا یه دیتابیس SQLite واحد جاشون رو گرفته که نصبها رو سریعتر و کمهزینهتر میکنه.
نصبهای گلوبال کاملاً ایزوله شدن. هر بار که pnpm add -g میزنی، یه دایرکتوری مستقل با package.json، node_modules و lockfile خودش ساخته میشه. این یعنی دیگه conflict بین peer dependency پکیجهای گلوبال نداری. باینریها هم حالا داخل زیرپوشهی bin در PNPM_HOME قرار میگیرن، نه مستقیم توی ریشه.
پیکربندی بازآرایی شده. فایل .npmrc دیگه فقط برای تنظیمات رجیستری و احراز هویت استفاده میشه. بقیهی تنظیمات باید بری داخل pnpm-workspace.yaml یا فایل گلوبال ~/.config/pnpm/config.yaml. متغیرهای محیطی هم باید از پیشوند pnpm_config_* استفاده کنن نه npm_config_*.
دستورهای جدید هم اضافه شدن: pnpm ci (نصب تمیز)، pnpm clean (حذف node_modules از تمام workspace)، pnpm sbom (تولید Software Bill of Materials)، pnpm peers check، و pnpm pack-app که یه entry point کامل رو به یه اجرایی standalone تبدیل میکنه. دستورات قدیمی مثل publish، login، logout و deprecate هم دیگه به npm CLI پاس نمیشن و native پیادهسازی شدن.
نکات کلیدی:
- حداقل نیاز به Node.js 22؛ نسخههای قدیمیتر پشتیبانی نمیشن
allowBuildsجایگزین تمام تنظیمات قدیمی build شده- store ایندکس از JSON به SQLite مهاجرت کرده (سرعت بالاتر)
- نصبهای گلوبال حالا ایزوله و مستقل از هم هستن
.npmrcفقط برای رجیستری/احراز هویت؛ بقیه تنظیمات به YAML منتقل شدن- متغیرهای محیطی از
npm_config_*بهpnpm_config_*تغییر کردن - دستورات publish و مشابه دیگه به npm CLI وابسته نیستن




