npm نیازمندی های تکراری در پروژه را چگونه مدیریت میکند؟

npm نیازمندی های تکراری در پروژه را چگونه مدیریت میکند؟

اگر پروژه ما بطور هم‌زمان، به چند نسخه از یک پکیج وابسته باشد، چه‌طور این تفاوت نسخه ها را مدیریت می‌کند؟ آیا npm تمام این نسخه ها را نصب می‌کند؟در این مقاله یاد میگیریم که هر یک از این نسخه ها کجای برنامه قرار می‌گیرند و npm برای مدیریت چنین تداخلی، از چه قانونی پیروی می‌کند.

تکراری بودن نیازمندی‌ها

تصور کنید پروژه‌ای داریم که پکیج‌های زیادی را بعنوان نیازمندی، در قسمت dependencies فایل package.json دارد. می‌دانیم که این پکیج‌ها هر کدام برای خود فایل package.json دارند و پکیج‌هایی را در آن بعنوان نیازمندی خود مشخص کرده‌اند، و این سلسله تکرار می‌شود و در مجموع، درخت نیازمندی‌های پروژه شکل می‌گیرد. وقتی در پروژه دستور npm install را اجرا می‌کنیم، npm تمامی این نیازمندی‌ها را در فولدرِ node_modules بصورت سطحی(همه نیازمندی‌ها sibling یکدیگر در همین فولدر، و نه بصورت عمقی و تو در تو) نصب می‌کند. پس از اجرای این دستور، اگر به فولدر node_modules مراجعه کنیم، می‌بینیم که هر کدام از نیازمندی‌های پروژه، یک فولدر در node_modules به خود اختصاص داده‌اند. حال فرض کنید پروژه‌ای داریم که تنها دو پکیج A و B نیازمندی‌های آن هستند. هر دوی این پکیج‌ها، خود نیازمندِ پکیج C هستند. اگر هر دو به نسخه یکسانی از C نیاز داشته باشند:

پس از اجرای دستور npm install، محتوای node_modules به این ترتیب خواهد بود:

همان‌طور که مشاهده می‌کنیم، پکیج C بصورت سطحی و بعنوان sibling سایر پکیج‌ها نصب می‌شود. اگر درون هر یک از فولدرهای A و B را ببینیم، هیچکدام فولدر node_modules ندارند.

اما اگر A و B به نسخه متفاوتی از C نیازمند باشند:

پس از اجرای npm install محتوای node_modules به این شکل خواهد بود:

یعنی تنها یکی از نسخه‌های C بعنوان sibling بقیه نصب می‌شود (version 1)، و نسخه دیگر در فولدرِ node_modules فولدری نصب می‌گردد که مربوط به پکیج وابسته به آن است (version 2).

زمانی که تعداد پکیج‌های وابسته به نسخه‌های مختلف C بیش از دو تا باشد نیز همین قاعده برقرار خواهد بود. یعنی تنها یک نسخه از پکیج بصورت سطحی نصب می‌شود(آنکه زودتر دانلود می‌شود) و بقیه نسخه‌ها در فولدر node_modules پکیج وابسته به آن‌ها نصب می‌گردد. برای درک بهتر این موضوع، ویدیوی موجود در آدرس زیر کمک کننده خواهد بود:

https://www.youtube.com/watch?v=5WlWue-Aero

 یکی از مهم‌ترین توانایی هایی که باید بعنوان برنامه نویس داشته باشیم، این است که بتوانیم نیازهای پروژه مان را با مراجعه به منابع مختلف برطرف کنیم. در پروژه خود از پکیج های آماده مناسب استفاده کنیم، مستندات مربوط به تکنولوژی های مورد استفاده مان را مطالعه کنیم و نحوه کار کردن با آن‌ها و روش یافتن پاسخ سؤالاتمان را بدانیم.

در دنیای جاوااسکریپت و وقتی با npm سر و کار داریم، یکی از مهم‌ترین این منابع وب‌سایت رسمی npm است:

npmjs.com

در مقاله بعد، می آموزیم که وقتی به صفحه مربوط به یک پکیج خاص در وب‌سایت npm می رویم، چه اطلاعاتی به دست می آوریم. پس همچنان با ما باشید...

1-1
NPM چیست و چه کاری انجام می دهد؟
تیم تولید محتوای سکان آکادمی
۱۳۹۹/۰۶/۳۰
1-2
دستور npm init و ایجاد یک پروژه بر اساس npm
تیم تولید محتوای سکان آکادمی
۱۳۹۹/۰۶/۳۱
1-3
وقتی یک پکیج npm را در پروژه نصب می کنیم، چه اتفاقی می افتد؟
تیم تولید محتوای سکان آکادمی
۱۳۹۹/۰۷/۰۱
1-4
تفاوت نصب یک پکیج بصورت local و global
تیم تولید محتوای سکان آکادمی
۱۳۹۹/۰۷/۰۲
1-5
پکیج npm را بصورت dependency نصب کنیم یا devDependency؟
تیم تولید محتوای سکان آکادمی
۱۳۹۹/۰۷/۰۵
1-6
نسخه بندی در npm
تیم تولید محتوای سکان آکادمی
۱۳۹۹/۰۷/۰۶
1-7
فایل package-lock.json چیست و چه کاری انجام می دهد؟
تیم تولید محتوای سکان آکادمی
۱۳۹۹/۰۷/۰۷
1-8
npm نیازمندی های تکراری در پروژه را چگونه مدیریت میکند؟
تیم تولید محتوای سکان آکادمی
۱۳۹۹/۰۷/۰۸
1-9
با مراجعه به صفحه اصلی یک پکیج در سایت npm چه اطلاعاتی بدست می آوریم؟
تیم تولید محتوای سکان آکادمی
۱۳۹۹/۰۷/۱۲
1-10
publish کردن پکیج در npm
تیم تولید محتوای سکان آکادمی
۱۳۹۹/۰۷/۱۵
1-11
کار با اسکریپت های npm
تیم تولید محتوای سکان آکادمی
۱۳۹۹/۰۷/۱۷
1-12
نکات تکمیلی درباره npm scripting
تیم تولید محتوای سکان آکادمی
۱۳۹۹/۰۷/۱۹
1-13
دستور npx چه کاری انجام می دهد؟
تیم تولید محتوای سکان آکادمی
۱۳۹۹/۰۷/۲۱
1-14
دستور npm audit چه کاربردی دارد؟
تیم تولید محتوای سکان آکادمی
۱۳۹۹/۰۷/۲۸
1-15
برخی دستورات کاربردی در npm
تیم تولید محتوای سکان آکادمی
۱۳۹۹/۰۷/۲۹
rocket
نظرات
اگر login نکردی برامون ایمیلت رو بنویس: