npm: مبانی، مدیر بسته برای React Native و Node.js

نویسنده: IT Sectr منتشر شده: 2026-02-13 زمان مطالعه: 10 دقیقه

npm (Node Package Manager) — مدیر بسته استاندارد برای پلتفرم Node.js که به همراه نصب Node.js ارائه می‌شود. npm وابستگی‌های پروژه‌های JavaScript و TypeScript را مدیریت می‌کند: کتابخانه‌ها را در node_modules نصب می‌کند، نسخه‌های بسته را به‌روزرسانی می‌کند، تعارضات نسخه را حل می‌کند. package.json — فایل پیکربندی مرکزی با فراداده و فهرست وابستگی‌ها. npm Registry — بزرگترین مخزن بسته. اطلاعات بیشتر در npm Registry.

نکات اصلی

  • npm — مدیر بسته استاندارد Node.js، همراه با نصب Node.js از نسخه 0.6.3
  • package.json — فایل پیکربندی پروژه با وابستگی‌ها، اسکریپت‌ها و فراداده
  • npm install — فرمان پایه نصب وابستگی‌ها از package.json به پوشه node_modules
  • package-lock.json — فایل تثبیت نسخه‌های دقیق برای نصب‌های قابل تکرار در همه محیط‌ها
  • npm ci — فرمان برای CI/CD که بسته‌ها را دقیقاً طبق فایل lock بدون به‌روزرسانی آن نصب می‌کند

npm چیست — مدیر بسته Node.js؟

npm در سال ۲۰۱۰ توسط Isaac Schlueter به عنوان راه‌حلی برای مدیریت وابستگی‌های Node.js ایجاد شد. از سال ۲۰۱۴ npm توسط شرکت npm, Inc. مدیریت می‌شود که در سال ۲۰۲۰ توسط Microsoft/GitHub خریداری شد. این ابزار از دو بخش تشکیل شده است: CLI (خط فرمان) برای نصب و مدیریت بسته‌ها، و Registry — مخزن مرکزی همه ماژول‌های منتشر شده در آدرس registry.npmjs.org.

npm Registry — بزرگترین مخزن بسته: بیش از ۲ میلیون بسته و بیش از ۱۰ میلیارد بارگیری ماهانه. هر بسته دارای نسخه SemVer، توضیحات، وابستگی‌ها، مجوز و نویسنده است. انتشار بسته شخصی از طریق npm publish انجام می‌شود. npm از بسته‌های scoped برای سازمان‌ها (@scope/package)، مخازن خصوصی و حسابرسی امنیتی داخلی پشتیبانی می‌کند.

Node.js نسخه ۱۸+ شامل npm ۹+ با عملکرد بهبودیافته، workspace برای مخازن چندگانه و مکانیزم بازطراحی‌شده peer dependencies است. اکوسیستم npm شامل JavaScript سمت سرور، فرانت‌اند (React, Vue, Angular)، توسعه موبایل (React Native)، ابزارهای ساخت (Webpack, Vite) و ابزارهای خط فرمان است. npm کانال اصلی توزیع کتابخانه‌های JavaScript است.

قابلیت‌های اصلی npm

npm install — فرمان اصلی که package.json و package-lock.json را برای نصب همه وابستگی‌ها در node_modules می‌خواند. در اولین اجرا، npm گراف وابستگی را محاسبه می‌کند، تعارضات نسخه را حل می‌کند و package-lock.json را تولید می‌کند. فرمان npm install <package> یک بسته خاص را نصب می‌کند؛ پرچم --save-dev به devDependencies و --global به صورت سراسری اضافه می‌کند.

npx — اجراکننده بسته که از نسخه ۵.۲ به npm اضافه شده است. npx امکان اجرای ابزارهای خط فرمان را بدون نصب سراسری فراهم می‌کند: npx react-native init یا npx create-react-app my-app. npx بسته را در حافظه موقت بارگیری و اجرا می‌کند و پس از اتمام آن را پاک می‌کند. npx همچنین برای اجرای نسخه‌های خاص ابزارها مفید است.

npm audit درخت وابستگی را برای آسیب‌پذیری‌های شناخته شده از پایگاه npm اسکن می‌کند. فرمان گزارشی با سطوح بحرانی (critical, high, moderate) ارائه می‌دهد و npm audit fix را برای به‌روزرسانی خودکار بسته‌های آسیب‌پذیر توصیه می‌کند. npm cache بسته‌های بارگیری شده را به صورت محلی ذخیره می‌کند. npm cache clean --force در صورت مشکلات نصب، حافظه نهان را پاک می‌کند. npm outdated بسته‌های قدیمی را نشان می‌دهد.

bash
# دستورات اصلی npm
$ npm install
$ npm install react-native-webview --save
$ npm install typescript --save-dev
# اجرا بدون نصب سراسری
$ npx react-native init MyApp
# حسابرسی امنیتی
$ npm audit --fix

ساختار package.json و مدیریت وابستگی‌ها

package.json — یک فایل JSON در ریشه پروژه است که فراداده، وابستگی‌ها و پیکربندی آن را توصیف می‌کند. فیلدهای اجباری: name (نام یکتای بسته) و version (نسخه SemVer، مثلاً ۱.۰.۰). فایل با فرمان npm init -y برای راه‌اندازی سریع یا به صورت دستی ایجاد می‌شود.

Semantic Versioning (SemVer) — استاندارد نسخه‌گذاری MAJOR.MINOR.PATCH. نسخه اصلی با تغییرات ناسازگار API، نسخه فرعی با افزودن قابلیت (سازگار با عقب) و وصله با رفع باگ‌ها تغییر می‌کند. نماد ^ قبل از نسخه اجازه به‌روزرسانی نسخه فرعی و وصله را می‌دهد، ~ فقط وصله را مجاز می‌کند.

json
{
  "name": "my-app",
  "version": "1.0.0",
  "private": true,
  "scripts": {
    "start": "expo start",
    "android": "expo start --android",
    "ios": "expo start --ios"
  },
  "dependencies": {
    "react": "^18.3.0",
    "react-native": "^0.76.0"
  },
  "devDependencies": {
    "typescript": "^5.5.0",
    "@types/react": "^18.3.0"
  }
}
فیلدهدفمقدار مثال
scriptsفرمان‌های اجرا برای npm run"start": "node index.js"
dependenciesوابستگی‌های تولید برنامه"react": "^18.3.0"
devDependenciesابزارهای توسعه و تست"jest": "^29.7.0"
peerDependenciesوابستگی‌های میزبان برای کتابخانه‌ها"react": ">=17.0.0"
enginesنیازمندی‌های نسخه Node.js{"node": ">=18.0.0"}

npm در توسعه React Native

React Native پروژه‌ها فعالانه از npm برای مدیریت وابستگی‌ها استفاده می‌کنند. مجموعه استاندارد شامل react، react-native، کتابخانه‌های ناوبری (React Navigation)، درخواست‌های HTTP (axios)، مدیریت状态 (Redux, Zustand) و کامپوننت‌های UI است. npm امکان نصب هزاران بسته سازگار از مخزن را فراهم می‌کند.

npx pod-install — فرمان اجباری پس از نصب ماژول‌های بومی در React Native برای iOS. npm به طور خودکار Podfile.lock را بر اساس package-lock.json تولید می‌کند. در پروژه‌های Expo به جای npm install از expo install استفاده می‌شود، زیرا نسخه‌های سازگار با SDK فعلی Expo را انتخاب می‌کند.

تعارضات نسخه — مشکل رایج React Native: react-native-reanimated، react-native-gesture-handler و react-native-safe-area-context به نسخه‌های سازگار نیاز دارند. راه‌حل — به‌روزرسانی همه بسته‌ها به آخرین نسخه‌های سازگار یا استفاده از --legacy-peer-deps. package-lock.json برای ماژول‌های بومی که از طریق CocoaPods و Gradle کامپایل می‌شوند حیاتی است.

مقایسه npm با مدیران جایگزین

npm — مدیر بسته استاندارد همراه با Node.js. جایگزین‌های اصلی: yarn (ایجاد شده توسط Facebook در ۲۰۱۶) و pnpm (سریع، با لینک‌های سخت). از npm ۵ به بعد، تفاوت سرعت و عملکرد بین npm و yarn حداقل است. npm ۷+ workspace اضافه کرد که آن را برای مخازن چندگانه رقابتی می‌کند.

ویژگیnpmyarnpnpm
سال ایجاد۲۰۱۰۲۰۱۶۲۰۱۷
فایل Lockpackage-lock.jsonyarn.lockpnpm-lock.yaml
نصبترتیبی (npm ۵+)موازیموازی
فضای دیسکاستاندارداستانداردحداقل (لینک)
Workspacesبله (npm ۷+)بلهبله
Plug'n'Playخیربلهخیر

بر اساس داده‌های State of JS ۲۰۲۵: npm توسط ۶۲٪ توسعه‌دهندگان استفاده می‌شود، yarn — ۳۵٪ (عمدتاً پروژه‌های قدیمی و طرفداران PnP)، pnpm — ۳٪. برای پروژه‌های React Native هر دو ابزار معادل هستند، اما npm در پروژه‌های Expo SDK ۵۰+ و راه‌اندازی‌های جدید React Native رایج‌تر است.

yarn در مخازن چندگانه بسیار بزرگ (۱۰۰+ بسته) به دلیل پیاده‌سازی بالغ‌تر workspace و Plug'n'Play مزیت خود را حفظ می‌کند. pnpm در صرفه‌جویی فضای دیسک با لینک‌های سخت به فروشگاه سراسری برنده است. انتخاب مدیر بستگی به ترجیحات تیم و زیرساخت دارد.

سوالات متداول

تفاوت npm install و npm ci چیست؟

npm install package-lock.json را به‌روزرسانی می‌کند و می‌تواند نسخه‌های فرعی جدید را در محدوده معنایی نصب کند. npm ci (Clean Install) node_modules را حذف می‌کند و بسته‌ها را دقیقاً طبق package-lock.json بدون به‌روزرسانی نصب می‌کند. npm ci سریع‌تر است، در CI/CD استفاده می‌شود و محیط یکسانی را در همه ماشین‌ها تضمین می‌کند. اگر package-lock.json وجود نداشته باشد، npm ci خطا می‌دهد.

چگونه تعارضات peer dependencies را در npm رفع کنیم؟

از npm ۷ به بعد، تعارضات peer dependencies باعث خطای ساخت می‌شود. راه‌حل‌ها: به‌روزرسانی همه بسته‌ها به نسخه‌های سازگار از طریق npm update، استفاده از پرچم --legacy-peer-deps برای حالت npm ۶، یا اضافه کردن بخش overrides در package.json برای تثبیت اجباری نسخه یک بسته خاص. بهترین گزینه — به‌روزرسانی وابستگی‌ها به نسخه‌های سازگار است.

npm audit چیست و چرا لازم است؟

npm audit درخت وابستگی را برای آسیب‌پذیری‌های شناخته شده از پایگاه npm Security Advisory اسکن می‌کند. فرمان گزارشی با سطح بحرانی (critical, high, moderate, low) ارائه می‌دهد و npm audit fix را برای به‌روزرسانی خودکار بسته‌های آسیب‌پذیر به نسخه‌های امن توصیه می‌کند. اجرای منظم npm audit — یک روش امنیتی پایه در پروژه‌های JavaScript است.

چگونه npm workspaces مخازن چندگانه را ساده می‌کند؟

npm workspaces امکان مدیریت چندین بسته در یک مخزن را فراهم می‌کند. فیلد "workspaces": ["packages/*"] را در package.json ریشه اضافه کنید. مزایا: نصب یکپارچه همه وابستگی‌ها در node_modules مشترک، لینک‌های نمادین خودکار بین بسته‌های محلی، اجرای اسکریپت‌ها برای همه بسته‌ها از ریشه، حذف تکرار نسخه‌ها.

چرا package-lock.json را در مخزن commit کنیم؟

package-lock.json نسخه‌های دقیق همه وابستگی‌ها و بسته‌های گذرای آنها را تثبیت می‌کند. بدون آن، توسعه‌دهندگان مختلف و سرورهای CI ممکن است نسخه‌های متفاوتی از کتابخانه‌ها را در محدوده معنایی دریافت کنند که منجر به خطاهای «روی ماشین من کار می‌کند» می‌شود. commit فایل lock، ساخت‌های قابل تکرار و رفتار یکسان در همه محیط‌ها را تضمین می‌کند.

خلاصه

  • npm — مدیر بسته استاندارد Node.js، همراه با نصب Node.js از نسخه ۰.۶.۳
  • package.json — فایل پیکربندی پروژه با وابستگی‌ها، اسکریپت‌ها و فراداده
  • npm install — نصب وابستگی‌ها، npm ci — تثبیت بر اساس package-lock.json برای CI/CD
  • package-lock.json — تثبیت نسخه‌های دقیق، اجباری برای ساخت‌های قابل تکرار
  • npm Registry — بزرگترین مخزن بسته با بیش از ۲ میلیون ماژول
  • npm audit — بررسی امنیتی وابستگی‌ها با رفع خودکار آسیب‌پذیری‌ها
  • npm workspaces — مکانیزم مدیریت مخازن چندگانه با node_modules مشترک

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید