مشکلات package*.json

هر پکیجی نصب می کنید تو package.json ذکر میشه. این پکیج ها خودشون به یه سری پکیج دیگه وابستگی داره و اون پکیج هم ممکنه به یه سری پکیج دیگه وابسته باشه. این پکیج هایی که خبری ازشون توی package.json نیست ولی توی node_modules نصب میشن. هر بار که npm فایل package.json را تغییر میدهد به صورت خودکار یک فایل به نام package-lock.json ایجاد می‌شود.

مثلا تو وقتی express رو نصب می کنی کلی dependencies داره که یکی از اونا accepts هست و خود accepts به negotiator وابسته هست. و این چرخه وابستگی برای تمام پکیج هایی که توی package.json ذکر میشه رخ میده.

مثلا هر بار دستور npm i رو میزنی فایل package-lock.json ایجاد یا بروز میشه. دستورات دیگر مثل npm rm و npm update نیز همینگونه هستند، یعنی هر تغییری ایجاد می‌کنند، بلافاصله فایل package-lock.json نیز بصورت خودکار با آن تغییرات همگام می‌شود.

فایل package-lock.json لیست

  • تمام پکیج‌های یک پروژه را، چه آن هایی که توی package.json ذکر شده
  • و چه آن هایی که در package.json ذکر نشدن (و وابستگی های پکیج هایی هستن که نصب کردی یا وابستگی های وابستگی ها هستن)

به همراه شماره دقیق نسخه‌اش (exact version number) در خود دارد. یعنی موقع نصب پکیج باید حتماً همان شماره نسخه پکیج نصب شود، نه آپدیت‌های بعدی آن. حالا اگه توی package.json بیای نسخه دقیق وابستگی های پروژه رو ذکر کنی مشکلش اینه که تو دسترسی به پکیج های درونی نداری.

اگر صرفاً نسخه express را که نیازمندی مستقیم ماست در فایل package.json بصورت دقیق مشخص کنیم، هیچ کنترلی روی شماره نسخه سایر پکیج‌ها، مثلاً عوض شدن نسخه accepts که پکیج‌های درخت نیازمندیِ خودِ express هستند نداریم و با گذشت زمان، ممکن است نسخه‌های جدیدتری از آن‌ها نصب شود که این مطلوب ما نیست. برای حل این مشکل از فایل package-lock.json استفاده می‌کنیم.