alireza binesh
alireza binesh
خواندن ۳ دقیقه·۵ سال پیش

کاربرد و تفاوت package.json و package-lock.json

نمایی از یک پروژه
نمایی از یک پروژه

احتمالا در هنگام استفاده از npm به دوفایل package.json و package-lock.json برخورده باشید در این متن میخواهیم قسمتی از کاربرد ان ها و تفاوتشان را باهم بفهمیم.


فایل package.json

همانطور که مشاهده میکنید این فایل حاوی لیست اطلاعاتی مانند نام، ورژن و.. از تمام ماژول ها و پکیج هایی هست که پروژه به ان مرتبط است و همچنین اطلاعاتی درباره خود پروژه است نظیر نام، نام مولف و... به طور مثال در شکل بالا، نام پروژه project است و نام مولف (بخش author) خالی گذاشته شده و یا در بخش پکیج های مربوط به پروژه از mongodb نسخه 3.3.1 استفاده شده ( علامت "^" کنار شماره نسخه نشان دهنده ان است از نسخه های بالاتر هم پشتیبانی میشود یعنی مثلا اگر نسخه بعدی mongodb ارایه شود انوقت شما توانایی این را دارید که ورژن mongodb پروژه خود را ارتقا دهید )

این فایل امکان مدیریت بهتر پکیج های یک پروژه رو به برنامه نویس ها میدهد و قابلیت بازتولید پروژه را توسط شما یا فرد دیگری ( درصورت انتشار) بسیار ساده میکند. به اینصورت که فرض کنید شما میخواهید طی یک کار تیمی پروژه خود را به اشتراک بگذارید، در این صورت دیگر لازم نیست کل پکیج های مخصوص پروژه خود را اپلود کنید خصوصا اگر حجم پکیج ها بسیار بالا و پروژه شما سنگین باشد. کافیست این فایل را اپلود کرده و فرد گیرنده با اجرای دستوراتی تمام پکیج ها و ماژول های لازم را برای اجرای پروژه بدست اورد.

با وجود این مزیت ها در مورد این فایل، گاهی وقت ها مشکلاتی ایجاد میشود. به طورمثال فرض کنید شما در سال 2019 در پروژه خود از نسخه 3.3.1 mongodb ( یک نوع دیتابیس است) استفاده کرده باشید و این پروژه خود را به اشتراک گذاشته باشید و چندسال بعد (مثلا 2023 ) فردی پیدا شده و قصد دارد از پروژه شما استفاده کند فرض کنید در سال 2023 نسخه شماره 4.1.0 از mongodb منتشر شده باشد و این نسخه با نسخه مورد استفاده شما در سال 2019 تفاوت هایی داشته باشد که درصورت استفاده آن در پروژه خود به طور کل پروژه شما کارایی خود را از دست میدهد و کار نمیکند در این صورت آن فرد نمیتواند از پروژه شما استفاده کند و پروژه شما عملا منقضی میشود ( با اجرای دستور npm install در cmd نسخه 4.1.0 به صورت خودکار نصب میشود و جایگزین نسخه قبلی میشود )

حال برای این مشکل راه هایی وجود دارد که به ان ها خواهیم پرداخت:

1. محدود کردن پروژه به استفاده از یک ورژن:

در این حالت شما به جای نوشتن "3.3.1^"در بخش ورژن mongodb فقط عبارت "3.3.1" را مینویسید در اینصورت پروژه شما فقط از ورژن 3.3.1 پشتیبانی میکند و در صورت استفاده آن توسط فرد دیگری این ورژن نصب میشود.

2. استفاده از فایل package-lock.json:

برای استفاده از این فایل شما نیازی به انجام کاری ندارید و با ایجاد فایل package.json این فایل نیز به طور خودکار ایجاد میشود. این فایل ورژن پروژه شما را قفل می کند یعنی به طور مثال اگر نسخه جدیدی از mongodb منتشر شود این نسخه در پروژه مورد استفاده قرار نمیگیرد و ورژن ثبت شده در فایل مذکور ( package-lock.json ) در پروژه شما نصب و استفاده میشود.

نمایی از پکیج mongodb در package-lock.json
نمایی از پکیج mongodb در package-lock.json


برای به روز کردن این فایل ها میتوان به راحتی و با اجرای دستور npm update پکیج ها داخل پروژه را به روز کرد.



لازم به ذکر است برای اشنایی بیشتر با این فایل ها باید بیشتر با آن ها درگیر شد و نحوه کار و عملکرد آن ها را مورد بررسی قرار داد.

برای خواندن بیشتر میتوانید به لینک زیر هم مراجعه کنید

https://medium.com/@dltlabs/package-json-vs-package-lock-json-c8d5deba12cb

package json
شاید از این پست‌ها خوشتان بیاید