
npm چیست؟ راهنمای نصب و مدیریت پکیجهای جاوا اسکریپت
npm ابزار مدیریت بستههای جاوا اسکریپت است؛ با آن کتابخانهها و ابزارهای پروژه را نصب، حذف و بهروزرسانی میکنید. اما چرا بعد از نصب یک پکیج کوچک، دهها پوشه جدید داخل پروژه ظاهر میشوند؟ پاسخ در وابستگیهای نرمافزاری است؛ موضوعی که روی اجرای برنامه، حجم پروژه و امنیت آن اثر دارد. در این مقاله از […]
npm چیست؟ راهنمای نصب و مدیریت پکیجهای جاوا اسکریپت
npm ابزار مدیریت بستههای جاوا اسکریپت است؛ با آن کتابخانهها و ابزارهای پروژه را نصب، حذف و بهروزرسانی میکنید. اما چرا بعد از نصب یک پکیج کوچک، دهها پوشه جدید داخل پروژه ظاهر میشوند؟ پاسخ در وابستگیهای نرمافزاری است؛ موضوعی که روی اجرای برنامه، حجم پروژه و امنیت آن اثر دارد.
در این مقاله از مجله پارس هاست توضیح میدهیم npm چیست، چگونه نصب میشود و چطور با دستورات اصلی آن کار کنید. همچنین تفاوت npm با Node.js، npx، Yarn و pnpm را بررسی میکنیم. برای شروع، همراه ما باشید.
npm چیست و چه کاربردی دارد؟
npm یک مدیر بسته یا Package Manager در اکوسیستم جاوا اسکریپت است. پکیج، مجموعهای از کدها و فایلهای قابل استفاده مجدد است؛ مثلا کتابخانهای برای اعتبارسنجی فرم یا ابزاری برای ساخت خروجی نهایی سایت.
عبارت Node Package Manager را معمولا برای معرفی npm بهکار میبرند، اما نام رسمی محصول همان npm است. این محصول سه بخش اصلی دارد: وبسایت برای جستجوی پکیجها، مخزن یا Registry برای نگهداری آنها و ابزار خط فرمان برای مدیریت بستهها. npm فقط مخصوص برنامههای سمت سرور نیست. پروژههای فرانتاند هم برای نصب ابزارهای توسعه، اجرای تست و ساخت فایلهای نهایی از آن استفاده میکنند.
npm چگونه کار میکند؟
وقتی نام پکیجی را به npm میدهید، ابزار خط فرمان اطلاعات آن را از مخزن دریافت میکند، نسخه مناسب را انتخاب میکند و بستههای لازم را نصب میکند. هر پکیج ممکن است به پکیجهای دیگری نیاز داشته باشد. این موارد وابستگی غیرمستقیم نام دارند؛ بههمین علت نصب یک کتابخانه گاهی تعداد زیادی بسته وارد پروژه میکند.
npm مشخصات پروژه را در package.json، جزئیات درخت وابستگیها را در package-lock.json و فایلهای نصب محلی را معمولا در node_modules نگه میدارد. مخزن پیشفرض عمومی است، اما شرکتها امکان استفاده از مخزن خصوصی را هم دارند.
تفاوت npm و Node.js چیست؟
نود جی اس چیست؟ محیط اجرای جاوا اسکریپت خارج از مرورگر است؛ npm ابزار مدیریت بستههاست. نصب یک کتابخانه با npm، معادل اجرای برنامه نیست.
جدول زیر نقش این دو را روشن میکند.
| ابزار | وظیفه | نمونه استفاده |
| Node.js | اجرای کد جاوا اسکریپت | اجرای فایل app.js |
| npm | نصب وابستگیها و اجرای اسکریپتهای پروژه | نصب کتابخانه و اجرای تست |
برای مثال، دستور node app.js کد برنامه را اجرا میکند؛ npm install وابستگیها را نصب میکند. ابزار npm نیز برای کار کردن به محیط Node.js نیاز دارد.

آموزش نصب npm در ویندوز و لینوکس
در روشهای رایج نصب Node.js، npm هم همراه آن نصب میشود. نسخه LTS پشتیبانی شده را متناسب با نیاز پروژه انتخاب کنید؛ شماره نسخه آموزشهای قدیمی را بدون بررسی تکرار نکنید. در ویندوز، فایل نصب رسمی Node.js را دریافت کنید و مراحل نصب را با فعال بودن npm و افزودن مسیر اجرایی به PATH ادامه دهید. پس از پایان، یک ترمینال جدید باز کنید.

در لینوکس، استفاده از مدیر نسخهای مانند nvm برای مدیریت چند نسخه کاربرد دارد. پس از نصب nvm طبق راهنمای رسمی، دستور nvm install –lts نسخه LTS را نصب میکند. روش نصب nvm لینوکس با nvm-windows یکسان نیست. مستندات npm نیز استفاده از مدیر نسخه را توصیه میکند.
۱. بررسی نسخه Node.js و npm
برای اطمینان از نصب، دو دستور زیر را جداگانه اجرا کنید:
- node -v
- npm -v
هر دستور باید شماره نسخه همان ابزار را نمایش دهد. شماره نسخه Node.js و npm یکسان نیست و نیازی هم به یکسان بودن آنها ندارید.

اگر ترمینال دستور را نمیشناسد، ابتدا PATH و محل نصب را بررسی کنید. روش نصب Node.js و npm در انواع توزیعهای لینوکس ممکن است متفاوت باشد. استفاده از مدیر نسخهای مانند nvm برای مدیریت چند نسخه کاربرد دارد.
آموزش کار با npm در پروژههای جاوا اسکریپت
برای تمرین، پوشهای خالی بسازید و ترمینال را داخل آن باز کنید. دستورات این بخش فایلهای همان پوشه را تغییر میدهند؛ مسیر جاری را پیش از اجرا بررسی کنید.
۱. ساخت پروژه با npm init
دستور npm init درباره نام، نسخه و مشخصات پروژه سوال میپرسد و فایل package.json را میسازد. برای پذیرش مقادیر پیشفرض، npm init -y را اجرا کنید. این دستور فایل اصلی برنامه یا یک سایت کامل نمیسازد؛ فقط اطلاعات اولیه بسته را ثبت میکند. نام پروژه را مثلا npm-demo بگذارید.
۲. نصب پکیج با npm install
برای نصب یک کتابخانه نمونه، دستور npm install lodash را اجرا کنید. npm بسته و وابستگیهای لازم را دریافت میکند و فایلهای مدیریت وابستگی را بهروز میکند.

با دستور npm ls lodash بررسی کنید کتابخانه در پروژه حضور دارد. برای استفاده از آن در یک آزمایش کوتاه، این دستور را اجرا کنید:
node -e “console.log(require(‘lodash’).chunk([1,2,3,4],2))”
خروجی، آرایه را به دو گروه دوتایی تقسیم میکند. این مثال، نصب و استفاده از پکیج را نشان میدهد؛ عملکرد npm به دانلود فایل محدود نیست.
۳. تفاوت نصب Local و Global
نصب محلی، بسته را در محدوده همان پروژه قرار میدهد. برای کتابخانههای برنامه، این روش مناسب است؛ اعضای تیم نیز نسخه مورد نیاز را از اطلاعات پروژه دریافت میکنند. نصب سراسری با پرچم -g، مثلا npm install -g typescript، بیشتر برای ابزارهای خط فرمان کاربرد دارد. نصب Global بهمعنی ثبت وابستگی در پروژه یا دسترسی همه کاربران سیستم نیست؛ محل نصب به تنظیمات محیط مربوط است.
۴. حذف و بهروزرسانی پکیجها
دستور npm uninstall lodash بسته را حذف میکند و اطلاعات وابستگی را اصلاح میکند. برای بررسی نسخههای قدیمی، npm outdated را اجرا کنید. دستور npm update بستهها را در محدوده نسخه مجاز پروژه بهروز میکند؛ لزوما جدیدترین نسخه اصلی را نصب نمیکند. تغییر نسخه اصلی ممکن است به اصلاح کد نیاز داشته باشد، پس پس از بهروزرسانی تستها را اجرا کنید.
مهمترین دستورات npm و کاربرد آنها
بهجای حفظ کردن همه دستورات، ابتدا کاربرد ۱۰ دستور اصلی زیر را بشناسید.
| دستور | کاربرد |
| npm init -y | ساخت package.json با مقادیر پیشفرض |
| npm install | نصب وابستگیهای پروژه |
| npm install lodash | افزودن یک پکیج مشخص |
| npm uninstall lodash | حذف پکیج |
| npm update | بهروزرسانی در محدوده مجاز نسخهها |
| npm outdated | نمایش بستههای قدیمی |
| npm ls –depth=0 | نمایش وابستگیهای سطح اول |
| npm run build | اجرای اسکریپت build تعریفشده در پروژه |
| npm ci | نصب پاک و مبتنی بر فایل قفل |
| npm audit | بررسی آسیبپذیریهای شناختهشده وابستگیها |
دستور npm run build فقط وقتی کار میکند که پروژه اسکریپتی با نام build داشته باشد. npm برای تمام پروژهها فرمان ساخت یکسانی تعریف نمیکند.
فایل package.json چیست و چه کاربردی دارد؟
فایل package.json شناسنامه پروژه است. نام، نسخه، اسکریپتها و وابستگیها را در این فایل نگه میدارید. برای خواندن آن، فایل را در ویرایشگر باز کنید.
بخشهای پرکاربرد آن عبارتاند از:
- name و version: نام و نسخه پروژه
- scripts: فرمانهای توسعه، تست یا ساخت
- dependencies: بستههای مورد نیاز برنامه
- devDependencies: ابزارهای توسعه و ساخت
برای نصب ابزار قالببندی در بخش توسعه، npm install –save-dev prettier را اجرا کنید. کتابخانهای که برنامه هنگام اجرا به آن نیاز دارد، معمولا در dependencies قرار میگیرد. ابزارهای devDependencies گاهی برای ساخت خروجی نهایی ضروریاند؛ بنابراین حذف آنها پیش از مرحله build ممکن است ساخت پروژه را متوقف کند.

تفاوت package.json و package-lock.json چیست؟
package.json نیازهای پروژه و محدوده نسخهها را توصیف میکند؛ package-lock.json جزئیات نسخههای انتخابی و درخت نصب را ثبت میکند. فایل قفل را همراه پروژه در گیت نگه دارید. اگر پروژه را در گیت هاب نگه میدارید، فایل package-lock.json را هم همراه کد ثبت کنید تا اعضای تیم به نسخههای مشخص وابستگیها دسترسی داشته باشند.
مستندات رسمی npm درباره این فایل میگوید:
“This file is intended to be committed into source repositories, and serves various purposes:” «این فایل برای ثبت در مخزن کد منبع در نظر گرفته شده است و کاربردهای مختلفی دارد.»
برای نصب در فرایند استقرار، npm ci به فایل قفل موجود نیاز دارد. اگر وابستگیهای آن با package.json هماهنگ نباشند، دستور خطا میدهد. همچنین node_modules قبلی را حذف میکند و نصب تازه انجام میدهد.

فایل قفل، جای ثبت نسخه Node.js و تنظیمات محیط را نمیگیرد. رفتار برنامه ممکن است با سیستم عامل یا وابستگیهای بومی متفاوت باشد.
پوشه node_modules چیست؟
پوشه node_modules محل معمول نگهداری بستههای نصب محلی و وابستگیهای آنهاست. این پوشه ممکن است بسیار بزرگتر از کد خود پروژه باشد. معمولا node_modules را وارد گیت نمیکنند؛ اعضای تیم با فایلهای package و دستور نصب، وابستگیها را بازسازی میکنند. فایلهای داخل آن را مستقیم ویرایش نکنید، چون نصب بعدی تغییرات را از بین میبرد.

تفاوت npm و npx چیست؟
npm ابزار مدیریت بستههاست؛ npx بیشتر برای اجرای ابزارهای بستهها کاربرد دارد و در نسخههای جدید بر npm exec تکیه میکند. مثلا پس از نصب محلی Prettier، دستور npx prettier –version نسخه ابزار را نمایش میدهد. اگر بسته مورد نیاز در دسترس نباشد، npx ممکن است پیشنهاد دریافت آن را بدهد و از کش استفاده کند.
پس npx همیشه «اجرا بدون دانلود» نیست. نام بسته و نسخه را بررسی کنید؛ اجرای یک ابزار ناشناس، همچنان اجرای کد روی دستگاه شماست.
تفاوت npm و Yarn و pnpm
هر سه ابزار وابستگیهای پروژه را مدیریت میکنند، اما در ساختار نصب و امکانات تفاوت دارند. جدول زیر تفاوت کلی آنها را نشان میدهد.
| ابزار | ویژگی شاخص | فایل قفل رایج |
| npm | همراه روشهای رایج نصب Node.js | package-lock.json |
| Yarn | پشتیبانی از Plug’n’Play و روشهای دیگر نصب | yarn.lock |
| pnpm | مخزن محتوایی مشترک و پیوندهای فایل | pnpm-lock.yaml |
pnpm با استفاده مجدد از محتوای بستهها، مصرف فضای تکراری را کاهش میدهد. Yarn در حالت PnP بهجای node_modules سنتی، از سازوکار بارگذاری مخصوص استفاده میکند؛ حالت node_modules را هم پشتیبانی میکند.
سرعت نصب به پروژه، کش، دیسک و نسخه ابزار مربوط است. مدیر بسته مورد توافق تیم را نگه دارید و فایلهای قفل ابزارهای مختلف را بیبرنامه مخلوط نکنید.
خطاهای رایج npm و روش رفع آنها
پیش از تغییر تنظیمات، متن خطا و فایل لاگ را بخوانید. این خطاها علت یکسانی ندارند:
- EACCES یا EPERM: مجوز پوشه، مالکیت فایل یا قفل بودن آن را بررسی کنید.
- ERESOLVE: سازگاری نسخهها و peerDependencies را بررسی کنید.
- ENOENT: مسیر جاری و وجود فایل مورد انتظار را کنترل کنید.
- خطای شبکه: اتصال، پراکسی، مخزن و گواهیهای معتبر را بررسی کنید.
استفاده از مدیر نسخه Node.js مانند nvm، نصب و مدیریت نسخهها را بدون نیاز به دسترسی مدیریتی سادهتر میکند. همچنین، پیش از اجرای دستورهای –force یا –legacy-peer-deps، علت ناسازگاری وابستگیها را بررسی کنید؛ زیرا این گزینهها ممکن است مشکلات سازگاری را پنهان کنند. برای رفع خطاهای اتصال نیز، بررسی تنظیمات شبکه و گواهیهای امنیتی ضروری است و غیرفعال کردن اعتبارسنجی TLS راهکار صحیح و مطمئنی نیست.
نکات امنیتی هنگام نصب پکیجهای npm
نصب بسته ممکن است کد اجرایی وارد محیط شما کند. نام دقیق، مخزن کد، نگهدارنده و تغییرات نسخه را پیش از افزودن وابستگی بررسی کنید؛ نامهای بسیار شبیه به بسته معروف، گاهی داماند. دستور npm audit آسیبپذیریهای شناختهشده را گزارش میکند، اما نبود گزارش، سلامت کامل بسته را ثابت نمیکند. اصلاح خودکار با npm audit fix –force هم ممکن است تغییر ناسازگار ایجاد کند. اسکریپتهای نصب، مطابق نسخه و سیاست npm، امکان اجرا دارند. پرچم –ignore-scripts اجرای اسکریپتهای نصب را متوقف میکند، اما ممکن است نصب بعضی بستهها ناقص بماند؛ همچنین مانع اجرای صریح npm run نمیشود.
پیش از خرید هاست nodejs از پارس هاست، نسخه مورد نیاز پروژه، روش استقرار و دسترسی نصب بستهها را با مشخصات سرویس تطبیق دهید و موارد مبهم را از پشتیبانی بپرسید. اگر پروژه را روی سرور اجرا میکنید، مدیریت وابستگیها را در کنار اصول امنیت سرور دنبال کنید؛ نصب بسته با حداقل دسترسی و حفاظت از توکنهای مخزن نیز اهمیت دارند.
پیش از استقرار، نصب پروژه را دوباره آزمایش کنید
یک کپی تازه از مخزن در محیط آزمایشی بگیرید، npm ci را اجرا کنید و سپس تست و ساخت پروژه را انجام دهید. این تمرین، وابستگیهایی را آشکار میکند که فقط روی رایانه شما حضور دارند. نسخه محیط اجرا، دستور ساخت و متغیرهای مورد نیاز را مستند کنید. پروژهای که با چند دستور مشخص دوباره نصب میشود، برای تحویل به همکار و استقرار بعدی آمادهتر است.
سوالات متداول درباره npm
۱. npm چیست و آیا رایگان است؟
npm ابزار مدیریت بستههاست و استفاده از ابزار خط فرمان و نصب بستههای عمومی معمولا رایگان است. خدمات خصوصی و سازمانی ممکن است هزینه داشته باشند.
۲. برای نصب پکیج عمومی، حساب npm لازم است؟
معمولا خیر. دریافت بسته عمومی به ورود نیاز ندارد؛ انتشار بسته یا دسترسی به مخزن خصوصی ممکن است احراز هویت بخواهد.
۳. بعد از حذف node_modules چه اتفاقی میافتد؟
بستههای محلی حذف میشوند. با فایل قفل هماهنگ، npm ci آنها را دوباره نصب میکند؛ تغییرات دستی داخل پوشه برنمیگردند.
۰