اگر بخواهید یک خانه بسازید. آیا از اول شروع به ساخت آجر، سیمان و لولهکشی میکنید؟ مسلماً نه! شما از مصالح آماده، درهای پیشساخته و لولههای استاندارد استفاده میکنید. در این مطلب به بررسی npm موتور محرک دنیای جاوا اسکریپت میپردازیم.
برنامهنویسی مدرن هم دقیقاً همینطور است. npm همان بازار بزرگ مصالح ساختمانی دنیای جاوااسکریپت است که به شما اجازه میدهد به جای اختراع دوباره چرخ، از قطعات آماده و تستشده دیگران استفاده کنید.
اگر به تازگی وارد دنیای جاوااسکریپت شدهاید یا اسم npm را شنیدهاید اما دقیقاً نمیدانید چیست، این مقاله برای شماست. ما قرار است بدون اصطلاحات پیچیده، دنیای جذاب npm را با هم کشف کنیم.

npm چیست؟
npm مخفف Node Package Manager است. اما بیایید آن را به زبان خودمانی تعریف کنیم:
npm سه چیز است:
۱. یک فروشگاه بزرگ آنلاین: بزرگترین فروشگاه قطعات آماده کد جاوااسکریپت در دنیا! میلیونها قطعه کد رایگان (پکیج یا بسته) که دیگران نوشتهاند و شما میتوانید دانلود و استفاده کنید.
۲. یک مدیر کارکشته: وقتی دهها قطعه از این فروشگاه برای پروژهتان میخرید، این مدیر (که همان خط فرمان npm است) مراقب است که همه قطعات با هم جور باشند، بهروز باشند و در جای درست نصب شوند.
۳. یک دفتر ثبت: یک دفترچه (فایل package.json) که مشخصات تمام مصالح پروژه شما را نگه میدارد تا اگر همکارتان خواست روی پروژه کار کند، دقیقاً همان مصالح شما را استفاده کند.
مثال: میخواهید یک اسلایدر تصویر زیبا برای وبسایتتان بسازید. دو راه دارید:
راه سخت: ۱۰۰۰ خط کد بنویسید، برای همه مرورگرها تست کنید، مشکلات موبایل را رفع کنید… (حداقل ۳ روز کار).
راه npm: در ترمینال تایپ کنید: npm install swiper. کمتر از ۱۰ ثانیه بعد، یک اسلایدر حرفهای که هزاران نفر استفاده کردهاند، در پروژه شما نصب شده و آماده استفاده است!
npm چطور کار میکند؟
برای درک npm، باید با سه عضو اصلی آن آشنا شویم:
۱. وبسایت npmjs.com (فروشگاه اصلی)
آدرسش است: [https://www.npmjs.com/](https://www.npmjs.com/)
میتوانید بین میلیونها پکیج جستجو کنید (مثلاً “calendar” برای تقویم یا “chart” برای نمودار).
برای هر پکیج، توضیح، راهنما، آمار دانلود و نظرات کاربران را میبینید. مثل دیجیکالای کد!
۲. خط فرمان npm (CLI) دستیار شخصی شما
این همان ابزار جادویی است که در ترمینال یا CMD از آن استفاده میکنید.
با دستوراتی ساده مثل npm install یا npm start کنترل پروژه را در دست میگیرید.
بعد از نصب Node.js، این ابزار به طور خودکار روی سیستم شما نصب میشود.
۳. رجیستری (انبار مرکزی)
یک پایگاهداده عظیم در سرورهای npm که تمام پکیجها و نسخههای آنها را نگهداری میکند.
وقتی شما npm install میزنید، خط فرمان به این انبار مرکزی وصل میشود و پکیج را دانلود میکند.
فایل package.json؛ شناسنامه پروژه شما
این مهمترین فایل در هر پروژهای است که از npm استفاده میکند. اگر پروژه شما یک نفر باشد، package.json کارت ملی آن است.
چطور ساخته میشود؟
با یک دستور ساده:
npm init
سپس چند سوال ساده از شما میپرسد (نام پروژه، توضیح، نویسنده و…) و این فایل را ایجاد میکند.
چه چیزهایی داخلش است؟
json
{
"name": "myawesomeproject",
"version": "1.0.0",
"description": "این یک پروژه عالی برای تست npm است",
"main": "index.js",
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js"
},
"dependencies": {
"express": "^4.18.2"
},
"devDependencies": {
"nodemon": "^3.0.1"
}
}
name & version: اسم و نسخه پروژه. خیلی مهم برای وقتی که بخواهید خود پروژه را به عنوان یک پکیج منتشر کنید.
scripts: دکمههای میانبر پروژه شما! به جای تایپ دستورات طولانی، یک نام ساده تعریف میکنید.
مثال: به جای node index.js، فقط npm start را تایپ میکنید.
npm run dev هم ممکن است سرور توسعه را با ابزاری مثل nodemon راهبیندازد که با هر تغییر کد، خودش ریاستارت میشود.
dependencies: لوازم اصلی پروژه. پکیجهایی که برای اجرای پروژه ضروری هستند (مثلاً فریمورک Express برای سرور).
devDependencies: ابزارهای کارگاهی. پکیجهایی که فقط موقع توسعه نیاز دارید (مثلاً nodemon برای ریاستارت خودکار، یا eslint برای بررسی کیفیت کد). موقع انتشار پروژه، اینها نصب نمیشوند.
دستورات جادویی npm که هر توسعهدهندهای باید بلد باشد
۱. نصب یک پکیج (خریدن از فروشگاه)
bash
npm install axios
چه میکند؟ آخرین نسخه پکیج axios (برای درخواستهای HTTP) را دانلود و نصب میکند.
کجا ذخیره میشود؟ در پوشهای به نام node_modules که به طور خودکار ساخته میشود. هرگز این پوشه را دستی ویرایش نکنید!
چطور ثبت میشود؟ نام و نسخه پکیج به بخش dependencies در package.json اضافه میشود.
نصب به عنوان ابزار توسعه:
bash
npm install savedev prettier
یا کوتاهشده:
bash
npm i D prettier
پکیج prettier (برای فرمتدهی خودکار کد) را فقط به عنوان ابزار توسعه نصب میکند و در devDependencies ثبت میکند.
۲. نصب همهچیز از نو
فرض کنید پروژه را از گیتهاب کلون کردهاید. پوشه node_modules وجود ندارد. فقط این دستور را بزنید:
bash
npm install
چه میکند؟ به فایل package.json نگاه میکند و تمامی پکیجهای لیست شده در dependencies و devDependencies را دانلود و نصب میکند. مثل این است که با یک لیست خرید به فروشگاه بروید و همه اقلام را بخرید.
۳. بهروزرسانی پکیجها
bash
npm update
تمام پکیجهای نصبشده را (با رعایت قوانین نسخهبندی) به جدیدترین نسخه سازگار بهروز میکند.
۴. حذف یک پکیج
bash
npm uninstall axios
پکیج axios را پاک میکند و نامش را از package.json حذف میکند.
۵. اجرای اسکریپتها (فشردن دکمه میانبر)
bash
npm start
npm run dev
npm test
دستورات از پیش تعریفشده در بخش scripts فایل package.json را اجرا میکند.
packagelock.jsonچیست؟
این فایل خودکار توسط npm ایجاد میشود. کارش چیست؟
مشکل: در package.json ممکن است نسخه یک پکیج به صورت ^4.18.2 نوشته شده باشد (یعنی “هر نسخهای از نسل ۴ که بالاتر از ۱۸.۲ باشد”). ممکن است روی سیستم شما نسخه ۴.۱۸.۵ نصب شود و روی سیستم همکارتان ۴.۲۰.۰. ممکن است بین این دو نسخه تغییرات شکستخوری وجود داشته باشد!
راهحل: packagelock.json عکس فوری و دقیق از درخت وابستگیهای پروژه شما در لحظه نصب است. دقیقاً مشخص میکند هر پکیج، کدام نسخهاش نصب شده.
نتیجه: اگر شما npm install بزنید و همکارتان هم روی پروژهای که packagelock.json دارد npm install بزند، عیناً همان نسخهها نصب میشود. تضمین سازگاری کامل.
نکته طلایی: فایل packagelock.json را همیشه به مخزن گیت (Git) اضافه کنید. آن را نادیده نگیرید!
npx، برادر کوچک و کارکشته npm
گاهی میخواهید یک ابزار را فقط یک بار اجرا کنید، نه اینکه آن را نصب کنید. اینجاست که npx به کمک میآید.
مثال کلاسیک: ایجاد یک پروژه React جدید
قدیم میگفتند:
bash
npm install g createreactapp اول نصب گلوبال
createreactapp myapp بعد اجرا
حالا با npx فقط میگویید:
bash
npx createreactapp myapp
چه میکند؟ آخرین نسخه createreactapp را به صورت موقت دانلود میکند، اجرا میکند و بعد از اتمام کار، پاکش میکند! مثل اجاره کردن به جای خریدن.
نسخهبندی معنایی (SemVer)؛ زبان مشترک npm
پکیجها از قاعده MAJOR.MINOR.PATCH پیروی میکنند (مثلاً ۱۶.۱۳.۱).
پچ (1): وقتی عدد سمت راست تغییر کند (۱۶.۱۳.۱ → ۱۶.۱۳.۲). یعنی رفع باگ کوچک و سازگار عقبگرد. ایمن برای آپدیت.
مینور (13): وقتی عدد وسط تغییر کند (۱۶.۱۳.۱ → ۱۶.۱۴.۰). یعنی افزودن قابلیت جدید اما به روشی سازگار با نسخه قبلی. معمولاً ایمن است.
مَیجر (16): وقتی عدد سمت چپ تغییر کند (۱۶.۱۳.۱ → ۱۷.۰.۰). یعنی تغییرات بزرگ و احتمالاً ناسازگار. باید حواستان باشد!
در package.json مینویسید:
"express": "4.18.2" → دقیقاً همین نسخه.
"express": "^4.18.2" → آخرین نسخهای که میجر آن 4 است (مثلاً 4.20.0). (پیشفرض npm).
"express": "~4.18.2" → آخرین نسخهای که میجر و مینور آن 4.18 است (مثلاً 4.18.5).
چرا npm اینقدر مهم است؟
۱. سرعت دیوانهوار: چرا یک ماه برای چیزی وقت بگذارید که در ۵ دقیقه میتوانید دانلود کنید؟
۲. کیفیت اثباتشده: پکیجهای محبوب توسط هزاران توسعهدهنده استفاده و باگهایشان رفع شده است.
۳. اجتماع عظیم: اگر به مشکلی برخوردید، به احتمال زیاد کسی قبلاً همان مشکل را داشته و راهحلش را در اینترنت گذاشته است.
۴. استاندارد صنعتی: امروزه تقریباً هیچ پروژه جدی جاوااسکریپتی بدون npm (یا رقیبش مثل yarn یا pnpm) وجود ندارد.
جمع بندی
npm در ابتدا ممکن است پیچیده به نظر برسد، اما در واقع بسیار ساده و شهودی است. شروع کنید. یک پروژه تستی بسازید (npm init). یک پکیج ساده نصب کنید (npm install chalk). یک اسکریپت برای خودتان بنویسید.
به یاد داشته باشید: همه توسعهدهندگان بزرگ روزی مبتدی بودند. قدرت دنیای متنباز و ابزاری مثل npm در همین است که شما میتوانید بر شانههای غولها بایستید و چیزهای خارقالعاده بسازید، بدون اینکه مجبور باشید از صفر شروع کنید.
پس ترمینال را باز کنید و بزنید npm init. سفر شما تازه آغاز شده است






