npm (Node Package Manager) — مدیر بسته استاندارد برای پلتفرم Node.js که به همراه نصب Node.js ارائه میشود. npm وابستگیهای پروژههای JavaScript و TypeScript را مدیریت میکند: کتابخانهها را در node_modules نصب میکند، نسخههای بسته را بهروزرسانی میکند، تعارضات نسخه را حل میکند. package.json — فایل پیکربندی مرکزی با فراداده و فهرست وابستگیها. npm Registry — بزرگترین مخزن بسته. اطلاعات بیشتر در npm Registry.
نکات اصلی
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 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 بستههای قدیمی را نشان میدهد.
# دستورات اصلی npm
$ npm install
$ npm install react-native-webview --save
$ npm install typescript --save-dev
# اجرا بدون نصب سراسری
$ npx react-native init MyApp
# حسابرسی امنیتی
$ npm audit --fix
package.json — یک فایل JSON در ریشه پروژه است که فراداده، وابستگیها و پیکربندی آن را توصیف میکند. فیلدهای اجباری: name (نام یکتای بسته) و version (نسخه SemVer، مثلاً ۱.۰.۰). فایل با فرمان npm init -y برای راهاندازی سریع یا به صورت دستی ایجاد میشود.
Semantic Versioning (SemVer) — استاندارد نسخهگذاری MAJOR.MINOR.PATCH. نسخه اصلی با تغییرات ناسازگار API، نسخه فرعی با افزودن قابلیت (سازگار با عقب) و وصله با رفع باگها تغییر میکند. نماد ^ قبل از نسخه اجازه بهروزرسانی نسخه فرعی و وصله را میدهد، ~ فقط وصله را مجاز میکند.
{
"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"} |
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 — مدیر بسته استاندارد همراه با Node.js. جایگزینهای اصلی: yarn (ایجاد شده توسط Facebook در ۲۰۱۶) و pnpm (سریع، با لینکهای سخت). از npm ۵ به بعد، تفاوت سرعت و عملکرد بین npm و yarn حداقل است. npm ۷+ workspace اضافه کرد که آن را برای مخازن چندگانه رقابتی میکند.
| ویژگی | npm | yarn | pnpm |
|---|---|---|---|
| سال ایجاد | ۲۰۱۰ | ۲۰۱۶ | ۲۰۱۷ |
| فایل Lock | package-lock.json | yarn.lock | pnpm-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 package-lock.json را بهروزرسانی میکند و میتواند نسخههای فرعی جدید را در محدوده معنایی نصب کند. npm ci (Clean Install) node_modules را حذف میکند و بستهها را دقیقاً طبق package-lock.json بدون بهروزرسانی نصب میکند. npm ci سریعتر است، در CI/CD استفاده میشود و محیط یکسانی را در همه ماشینها تضمین میکند. اگر package-lock.json وجود نداشته باشد، npm ci خطا میدهد.
از npm ۷ به بعد، تعارضات peer dependencies باعث خطای ساخت میشود. راهحلها: بهروزرسانی همه بستهها به نسخههای سازگار از طریق npm update، استفاده از پرچم --legacy-peer-deps برای حالت npm ۶، یا اضافه کردن بخش overrides در package.json برای تثبیت اجباری نسخه یک بسته خاص. بهترین گزینه — بهروزرسانی وابستگیها به نسخههای سازگار است.
npm audit درخت وابستگی را برای آسیبپذیریهای شناخته شده از پایگاه npm Security Advisory اسکن میکند. فرمان گزارشی با سطح بحرانی (critical, high, moderate, low) ارائه میدهد و npm audit fix را برای بهروزرسانی خودکار بستههای آسیبپذیر به نسخههای امن توصیه میکند. اجرای منظم npm audit — یک روش امنیتی پایه در پروژههای JavaScript است.
npm workspaces امکان مدیریت چندین بسته در یک مخزن را فراهم میکند. فیلد "workspaces": ["packages/*"] را در package.json ریشه اضافه کنید. مزایا: نصب یکپارچه همه وابستگیها در node_modules مشترک، لینکهای نمادین خودکار بین بستههای محلی، اجرای اسکریپتها برای همه بستهها از ریشه، حذف تکرار نسخهها.
package-lock.json نسخههای دقیق همه وابستگیها و بستههای گذرای آنها را تثبیت میکند. بدون آن، توسعهدهندگان مختلف و سرورهای CI ممکن است نسخههای متفاوتی از کتابخانهها را در محدوده معنایی دریافت کنند که منجر به خطاهای «روی ماشین من کار میکند» میشود. commit فایل lock، ساختهای قابل تکرار و رفتار یکسان در همه محیطها را تضمین میکند.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.