تفاوت npx با npm چیست؟

05 آذر 1399, خواندن در 4 دقیقه

زمانی که شروع به یادگیری ری‌اکت کردم، متوجه شدم که افراد زیادی در هنگام مواجه شدن با npx برای بار اول، دچار سردرگمی می‌شوند. این اتفاق برای خود من هم افتاده است؛ چرا که همیشه عادت به دیدن npm معروف داشته‌ایم.

برخی از ما در اولین مواجه با npx خیلی به آن اهمیت نداده‌ایم و حتی بعضی‌هایمان فکر کردیم که شاید غلط نوشتاری رخ داده است!

اما بالاخره وقتی می‌بینیم که چیزی در حال تکرار شدن زیاد است، باید کنجکاو شویم و بدانیم که احتمالا پی‌گیری کردن چیستی و نحوه کارکرد آن، ارزشش را دارد. هدف این مقاله نیز شرحی بر npx جدید است که در برخی منابع رسمی و مهم جایگزین npm شده است.

NPM

همان‌طور که احتمالا همه‌ی شما می‌دانید، npm یک پکیج منیجیر برای Node.js است که هدفش خودکار کردن روند کارکرد وابستگی‌ها (dependency) ی یک پروژه و مدیریت پکیح‌های آن است.

به عبارت دیگر شما می‌توانید تمامی وابستگی‌ها و یا پکیج‌های مربوط به پروژه‌تان را در فایل package.json مشخص کنید و هرگاه شخص دیگری خواست پروژه شما را به اجرا درآورد، می‌تواند تنها با نوشتن دستور npm install یا npm i به نصب تمامی آن وابستگی‌ها که برای ران کردن پروژه موردنیاز اند، بپردازد.

علاوه بر این versioning یا مشخص کردن نسخه‌ها را نیز ممکن می‌سازد. به عنوان مثال نشان می‌دهد که پروژه‌ی شما از کدام نسخه‌ی فلان کتاب‌خانه بهره برده است و بدین ترتیب شما با متناسب‌ترین نسخه‌ی ممکن از پکیج‌های استفاده شده، پروژه را به اجرا در میاورید تا از مشکلات احتمالی و تداخلات زیادی جلوگیری شود.

NPX

از طرف دیگر، npx هم ابزاریست برای به اجرا درآوردن پکیج‌های Node و از نسخه‌ی npm 5.2 به بعد در اختیار کابران این پکیج منیجر قرار گرفته است.

در زیر می‌توانید کاری که npx انجام می‌دهد را مشاهده کنید:

  1. به طور پیش‌فرض ابتدا بررسی می‌کند که آیا پکیجی که می‌خواهد اجرا شود در مسیر پروژه‌تان موجود است یا خیر.
  2. اگر در مسیر پروژه وجود داشت، آن را اجرا می‌کند.
  3. در غیر این‌صورت، یعنی پکیج نصب نشده است؛ پس npx به نصب آخرین نسخه‌ از آن وابستگی می‌پردازد و سپس آن را به اجرا در می‌آورد.

این رفتار معمول npx است که در بالا شرح داده شده است؛ البته که دارای فلگ‌هایی نیز است که می‌توانند برای جلوگیری از این مراحل به کار بیایند.

برای مثال اگر دستور npx some-package --no-install را به اجرا در آورید، به npx اعلام کرده‌اید که باید فقط سعی در به اجرا در آوردن پکیج some-package بدون نصب کردن آن بکند. (اگر که از قبل این پکیج نصب شده باشد)

مثال

بیاید فرض کنید که یک پکیح به نام my-package داریم و قصد به اجرا در آوردنش را کرده‌ایم.

بدون استفاده از npx باید برای اجرای پکیج آن را از مسیر محلی (لوکال) آن که به صورت زیر است، به اجرا درآورید:

./node_modules/.bin/my-package

یا آن را به شکل یک اسکریپت جداگانه در فایل package.json تعریف کنید؛ چیزی شبیه به قطعه کد زیر:

{
  "name": "something",
  "version": "1.0.0",
  "scripts": {
    "my-package": "./node_modules/.bin/my-package"
  }
}

و سپس با اجرای دستور npm run my-package به هدف خود برسید.

در حال حاضر می‌توان با استفاده از npx این عملیات را به سادگی با دستور npx my-package به اجرا در آوریم.

نتیجه‌گیری

در انتها لازم به ذکر است که ویژگی منحصر به فرد npx که آن را برای توسعه‌دهندگان جذاب‌تر کرده، این است که به شما اجازه می‌دهد که یک پکیج را بدون نصب اولیه و گلوبال، به اجرا درآورید.

برای مثال شما برای اجرا کردن پکیج cowsay نیاز به نصب آن به شکل گلوبال در کامپیوتر خود (npm i cowsay -g) و سپس به اجرا در آوردن آن (cowsay “hello world”) دارید. اما اگر بخواهید از npx در این مثال استفاده کنید، می‌توانید از همان ابتدا، بدون نصب این پکیج، با دستورnpx cowsay “hello world" به اجرای این پکیج بپردازید.

در نهایت امیدوارم به این نتیجه رسیده باشید:

npm !== npx

اگر هر سوالی در این باره در ذهنتان باقی مانده، آن را در بخش نظرات بیان کنید.

منبع

چه امتیازی به این مقاله می دید؟
خیلی بد
بد
متوسط
خوب
عالی

دیدگاه‌ها و پرسش‌ها

برای ارسال دیدگاه لازم است، ابتدا وارد سایت شوید.

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

آفلاین
user-avatar
ابوالفضل باغشاهی @BAbolfazl
Front-End
دنبال کردن

گفتگو‌ برنامه نویسان

بخشی برای حل مشکلات برنامه‌نویسی و مباحث پیرامون آن وارد شو