npm ci یا npm install: کدوم کجا؟
خلاصهٔ کاملتر
ریان چندلر تو یه پست کوتاه فرق دو دستور رایج نصب وابستگی تو پروژههای جاوااسکریپت رو روشن میکنه. npm install همون وابستگیهایی که تو package.json لیست شدن رو نصب میکنه، و اگه نسخهای که نصب میشه با نسخهی داخل package-lock.json فرق داشته باشه، فایل lock رو هم با نسخهی جدید آپدیت میکنه. به گفتهی نویسنده همین انعطافپذیری دردسر درست میکنه: محیطهای مختلف با هم جور درنمیان و نسخهها بیخبر بالا میرن.
در مقابل npm ci دقیقا همون نسخهای رو نصب میکنه که تو package-lock.json نوشته شده (ci یعنی clean install، نصب از صفر). یعنی مطمئنی چیزی که دست تو نصب شده همونیه که روی برنچ main و دست بقیهی تیم هست، به شرطی که اونا هم از npm ci استفاده کنن. اگه package-lock.json با package.json ناهمگون باشه، دستور بهجای حدس زدن کلا fail میکنه تا مطمئن شه چیز درستی نصب میکنه.
جمعبندی خود نویسنده سادهست: npm install رو فقط وقتی بزن که میخوای پکیج جدیدی نصب یا آپدیت کنی. npm ci رو بزن وقتی پروژه رو تازه از گیت کلون کردی، میخوای محیط لوکالت رو همتراز کنی، یا تو پایپلاین CI/CD و بیلد پروداکشن که ثبات و قطعیت مهمه. نویسنده اضافه میکنه که تو CI معمولا سرعتش هم بهتر از npm install درمیاد.
نکات کلیدی:
- npm install از package.json نصب میکنه و در صورت تفاوت نسخه، package-lock.json رو بازنویسی میکنه.
- npm ci نسخههای دقیق package-lock.json رو نصب میکنه و با lock ناهمگون اصلا اجرا نمیشه.
- پیشنهاد نویسنده: npm install فقط برای اضافه یا آپدیت کردن پکیج، npm ci برای نصب از صفر، CI/CD و بیلد پروداکشن.
- تو CI معمولا npm ci از npm install سریعتره.




