Mojtaba Pourkhanlar
About meProjectsBlog

  • 👤About me
  • 🧰Projects
  • ✍️Blog

تفاوت npm و Yarn و pnpm

در دنیای JavaScript سه پکیج‌منیجر محبوب وجود دارد:

  • npm : Node Package Managers
  • Yarn : Yet Another Resource Negotiator
  • pnpm : Performant Node Package Manager

این ابزارها مسئول نصب، مدیریت و نگهداری وابستگی‌های پروژه هستند.


npm

خب npm پکیج منیجر پیش‌فرض Node.js ـه.

یعنی Node رو نصب کنی، npm هم باهاش میاد

ویژگی‌ها:

  • استاندارد و رایج‌ترین گزینه
  • دارای فایل قفل: package-lock.json
  • پشتیبانی از Workspaces
  • سازگاری بسیار بالا با اکوسیستم

مزایا:

  • همیشه در دسترس
  • ساده و قابل اعتماد

معایب:

  • در برخی پروژه‌ها سرعت و مصرف دیسک بیشتر نسبت به pnpm

Yarn

خب Yarn برای بهبود سرعت و مدیریت بهتر وابستگی‌ها ایجاد شد توسط Facebook (Meta) برای رفع مشکلات npm

ویژگی‌ها:

  • فایل قفل: yarn.lock
  • دارای نسخه Classic (v1) و Berry (v2+)
  • مدیریت قوی Workspaces

مزایا:

  • مناسب پروژه‌های تیمی بزرگ (monorepo)
  • سریع‌تر از npm
  • لاک فایل پایدارتر

معایب:

  • تفاوت زیاد بین نسخه‌ها ممکن است گیج‌کننده باشد چون نیاز به نصب جداگانه دارد

pnpm

خب pnpm تمرکز ویژه‌ای روی سرعت و مصرف کم فضای دیسک دارد و نمیزاره پکیچ های تکراری در هر پروژه دوباره نصب شوند اون پکیج ها

ویژگی‌ها:

  • فایل قفل: pnpm-lock.yaml
  • استفاده از global store
  • اتصال پکیج‌ها با لینک به جای کپی کامل

مزایا:

  • مصرف بسیار کمتر فضای دیسک
  • سرعت نصب بالا
  • ساختار وابستگی سخت‌گیرانه‌تر و امن‌تر

معایب:

  • ممکن است پروژه‌های قدیمی که وابستگی‌های ضمنی دارند خطا بدهند

تفاوت در ساختار node_modules

npm / Yarn

پکیج‌ها معمولاً کپی می‌شوند و Hoisting زیاد انجام می‌شود.

pnpm

پکیج‌ها در یک storage مرکزی ذخیره شده و با لینک متصل می‌شوند. ساختار دقیق‌تر و وابستگی‌ها شفاف‌تر هستند.


دستورات معادل


کار npm yarn pnpm


نصب وابستگی‌ها

  • npm install
  • yarn install
  • pnpm install

اضافه کردن پکیج

  • npm install axios
  • yarn add axios
  • pnpm add axios

حذف پکیج

  • npm remove axios
  • yarn remove axios
  • pnpm remove axios

اجرای اسکریپت

  • npm run dev
  • yarn dev
  • pnpm dev

جمع‌بندی

  • اگر ساده‌ترین و استانداردترین گزینه را می‌خواهید → npm
  • اگر Workspaces و monorepo مهم است → Yarn
  • اگر سرعت، نظم وابستگی‌ها و مصرف کم دیسک مهم است → pnpm