مدیریت بسته‌های جاوااسکریپت با pnpm؛ سریع‌تر و بهینه‌تر از npm

معرفی کامل pnpm به عنوان مدیر بسته‌ی سریع، متن‌باز و کم‌حجم برای جاوااسکریپت. نحوه‌ی نصب، مزایای ساختار محتوایی و مقایسه با ابزارهای سنتی.

🎧 خلاصه صوتی مقاله (پادکست ۲ دقیقه‌ای):

فرصت مطالعه ندارید؟ چکیده این مطلب را همین‌جا گوش دهید:

مدیریت وابستگی‌ها و بسته‌های نرم‌افزاری در پروژه‌های بزرگ جاوااسکریپت همیشه یکی از چالش‌های زمان‌بر توسعه‌دهندگان بوده است. ابزار مدیریت کد و ابزارهای توسعه نقش مهمی در سرعت بخشیدن به روند تولید نرم‌افزار دارند و در این میان، مدیر بسته‌ی pnpm توانسته تحولی جدی در این حوزه ایجاد کند. این ابزار متن‌باز با ارائه‌ی یک ساختار ذخیره‌سازی مبتنی بر محتوا (Content-addressable storage)، فضای دیسک مصرفی را به شدت کاهش داده و سرعت نصب بسته‌ها را به شکل چشمگیری افزایش می‌دهد.

نام ابزارpnpm
زبان برنامه‌نویسیجاوااسکریپت / Rust (نسخه‌ی آزمایشی)
مجوز (License)MIT (بخش‌هایی تحت PolyForm Shield)
سیستم‌عامل‌های پشتیبانی‌شدهویندوز، لینوکس، مک‌اواس
وضعیت دسترسی ایرانبدون محدودیت (Accessible)

مشکلی که pnpm حل می‌کند و ساختار منحصربه‌فرد آن

در ابزارهای سنتی مانند npm، اگر شما ۱۰۰ پروژه‌ی مختلف داشته باشید که همگی از کتابخانه‌ی یکسانی مثل lodash استفاده کنند، ۱۰۰ نسخه‌ی مجزا از آن کتابخانه روی دیسک سخت شما کپی می‌شود. این روند علاوه بر مصرف حجم زیادی از حافظه، زمان نصب را نیز طولانی می‌کند. pnpm این مشکل را با استفاده از یک انبار مرکزی (Content-addressable storage) حل کرده است.

در این روش، تمام فایل‌های بسته‌ها در یک نقطه‌ی واحد روی دیسک ذخیره می‌شوند. زمانی که پروژه‌ای را نصب می‌کنید، فایل‌ها از آن انبار مرکزی با استفاده از لینک‌های سخت (Hard-links) یا کپی هنگام نوشتن (Reflinks/Copy-on-write) به پوشه‌ی node_modules پروژه متصل می‌شوند. در نتیجه، هیچ فضای اضافی روی دیسک اشغال نمی‌شود و فرآیند نصب با سرعتی تا دو برابر بیشتر نسبت به رقبا انجام می‌پذیرد.

نصب و راه‌اندازی pnpm

برای نصب این ابزار روش‌های مختلفی وجود دارد. ساده‌ترین روش استفاده از دستور رسمی curl یا wget در ترمینال است یا می‌توانید از طریق خود ابزار Node.js (npm) اقدام کنید. دستور زیر رایج‌ترین روش نصب عمومی pnpm در سیستم است:

curl -fsSL https://get.pnpm.io/install.sh | sh -

پس از اجرای دستور بالا، اسکریپت نصب به صورت خودکار آخرین نسخه را دریافت کرده و مسیرهای لازم را در متغیرهای محیطی سیستم شما تنظیم می‌کند. اگر مایل هستید آن را از طریق npm نصب کنید، می‌توانید دستور زیر را وارد نمایید:

npm install -g pnpm

پس از اتمام نصب، برای اطمینان از درستی کارکرد، می‌توانید نسخه‌ی ابزار را با دستور pnpm --version بررسی کنید.

مدیریت بسته‌های جاوااسکریپت با pnpm؛ سریع‌تر و بهینه‌تر از npm
مدیریت بسته‌های جاوااسکریپت با pnpm؛ سریع‌تر و بهینه‌تر از npm

نحوه‌ی استفاده و دستورات پرکاربرد

کار با pnpm بسیار شبیه به سایر مدیران بسته‌ها است و به راحتی می‌توانید دستورات آشنای خود را جایگزین کنید. در ادامه چند دستور کلیدی آورده شده است:

نصب وابستگی‌ها در پروژه

هنگامی که پروژه‌ای جدید کلون می‌کنید یا فایل package.json شما به‌روزرسانی شده است، برای نصب تمام وابستگی‌ها از دستور زیر استفاده کنید:

pnpm install

این دستور تمام بسته‌های مورد نیاز را بر اساس فایل قفل pnpm-lock.yaml با دقتی بالا و به صورت قطعی (Deterministic) نصب می‌کند.

افزودن یک بسته‌ی جدید

برای اضافه کردن یک کتابخانه‌ی جدید به پروژه‌ی خود (مثلاً کتابخانه‌ی lodash)، کافی است دستور زیر را اجرا کنید:

pnpm add lodash

این دستور بسته را به انبار مرکزی اضافه کرده و لینک آن را در پروژه‌ی جاری برقرار می‌کند و نام آن را در package.json ذخیره می‌نماید.

ویژگی‌های کلیدی و قابلیت‌های پیشرفته

برخلاف ساختارهای تخت (Flat node_modules) در سایر ابزارها، pnpm رویکردی سخت‌گیرانه (Strict) دارد. به این معنا که یک بسته فقط می‌تواند به وابستگی‌هایی دسترسی داشته باشد که صراحتاً در فایل package.json خودِ آن بسته تعریف شده‌اند. این ویژگی از خطاهای پنهان و استفاده‌ی ناخواسته از بسته‌های دسترسی‌نشده جلوگیری می‌کند.

  • مناسب برای مونوپروژه‌ها (Monorepos): پشتیبانی داخلی و قدرتمند از Workspace برای مدیریت چندین پکیج در یک مخزن واحد.
  • مدیریت نسخه‌های Node.js: قابلیت کار به عنوان مدیر نسخه‌ی Node.js از طریق ابزار داخلی pnpm runtime.
  • پشتیبانی از پلتفرم‌های مختلف: سازگاری کامل با سیستم‌عامل‌های ویندوز، لینوکس و مک‌اواس.
  • پورت آزمایشی زبان Rust: توسعه‌ی نسخه‌ی جدید CLI با نام pacquet که با زبان Rust نوشته شده است تا سرعت اجرای دستورات را باز هم فراتر ببرد.

پرسش‌های متداول

آیا pnpm با پروژه‌های قدیمی که از npm استفاده می‌کنند سازگار است؟

بله، pnpm کاملاً با ساختار پروژه‌های استاندارد Node.js سازگار است. فایل‌های package.json دست‌نخورده باقی می‌مانند و این ابزار تنها فایل قفل اختصاصی خود یعنی pnpm-lock.yaml را ایجاد می‌کند.

تفاوت اصلی ساختار پوشه‌ی node_modules در pnpm چیست؟

بر خلاف ساختار تخت، pnpm از ساختاری مبتنی بر نمادین‌سازی (Symlinks) استفاده می‌کند که تمام بسته‌ها را در ساختاری درختی و کاملاً ایزوله درون پوشه‌ی مخفی قرار می‌دهد تا از تداخل نسخه‌ها جلوگیری شود.

آیا انتقال پروژه‌های بزرگ به pnpm پیچیده است؟

خیر، کافی است پوشه‌ی node_modules و فایل قفل قبلی را حذف کرده و یک بار دستور pnpm install را اجرا کنید تا تمام وابستگی‌ها بر اساس ساختار جدید تنظیم شوند.

جمع‌بندی

مدیر بسته‌ی pnpm ابزاری کارآمد، سریع و بهینه‌سازی‌شده برای توسعه‌دهندگان جاوااسکریپت است که با ارائه‌ی تکنیک ذخیره‌سازی مبتنی بر محتوا، علاوه بر ارتقای چشمگیر سرعت نصب، حجم زیادی از حافظه‌ی دیسک سخت را نجات می‌دهد. ساختار سخت‌گیرانه و پشتیبانی قدرتمند از مونوپروژه‌ها باعث شده است که تیم‌های بزرگ در سراسر جهان با خیال راحت از آن در محیط‌های تولیدی استفاده کنند. اگر به دنبال بهینه‌سازی جریان کاری برنامه‌نویسی خود هستید، استفاده از pnpm گزینه‌ای ایده‌آل خواهد بود.

مشاهده‌ی پروژه در GitHub

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *