برنامه نویسی

 npm موتور محرک دنیای جاوا اسکریپت

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

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

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

"<yoastmark


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`. سفر شما تازه آغاز شده است

دکمه بازگشت به بالا