دقیقه مطالعه

راهنمای رفع خطای MODULE_NOT_FOUND در Nodejs

راهنمای رفع خطای MODULE_NOT_FOUND در Nodejs
05 - تیر - 1402

اگر شما تجربه کار بر روی پروژه های نود جی اس رو داشته باشید و با کتابخانه ها نود جی اس و جاوا اسکریپت  و فریم‌ورک هایی مثل vue , angular و react  کار کرده باشید حتما با ارور “Error: cannot find module”  مواجه شدید و این پیام را در هنگام دباگ پروژه نود جی اس خود مشاهده کردید.
در این آموزش دلیل نمایش این خطا و همینطور راه حل رفع این خطا را با هم مرور خواهیم کرد تا با استفاده از این مطالب این خطا را در پروژه های نود جی اس خود رفع کنیم.

 

راهنمای رفع خطای module_not_found

مشاهده خطای پروژه در ترمینال با استفاده از pm2

برای وارد شدن در محیط ترمینال، در سی پنل  لاگین می کنیم (آموزش لاگین به سی پنل) و به تب advance  می رویم و روی گزینه terminal کلیک می کنیم.

 

 

 

با کلیک بر روی گزینه terminal وارد  ترمینال می شویم و می توانیم دستورات نود جی اس را وارد و اجرا کنیم .

 

 

وارد کردن دستور pm2 در ترمینال

 

برای مشاهده و بررسی ارور لاگ وارد محیط ترمینال شده و دستور pm2 logs  به همراه نام دامنه و یا سابدامنه پروژه را وارد می کنیم و با زدن اینتر، لاگ پروژه و خطاهای احتمالی در صورت بروز ،نمایش داده میشه .

 

دلیل نمایش خطای  MODULE_NOT_FOUND

عمده ترین دلایلی که باعث می شود در پروژه های نود جی اس با این خطا مواجه شویم  به شرح زیر است :

1- در پروژه در حال ایمپورت کردن آیتمی هستیم که ماژول آن در فولدر پروژه ما وجود ندارد.

2- اگر پکیجی که در حال استفاده از آن هستیم قدیمی (outdated) باشد و با ورژن نود جی اس ما همخوانی نداشته باشد با این ارور مواجه  می‌شویم

3- در پروژه  فایلی فراخوانی می‌شود که در پروژه موجود نیست .

اما اکثر این ارور زمانی نمایش داده می‌شود که ما در پروژه خود از دستوراتی  با استفاده از فرمان import  در پروژه خود اضافه کردیم اما پکیج آن را هنوز نصب نکردیم.

 

راه حل رفع خطای MODULE_NOT_FOUND

در واقع، در هنگام دباگ  پروژه های نود جی اس با استفاده از دستور pm2 logs yourdomain.com (به جای yourdomain.com  باید  نام دامنه و یا سابدامنه ای که در هنگام ایجاد اپلیکیشن تعریف کرده ایم وارد می‌کنیم) ، متن خطایی که نمایش داده می شود شامل اطلاعات مهمی هست که  دلیل خطا و راه حل آن را به ما  نمایش می دهد.

البته باید توجه داشته باشید که برای استفاده از دستور pm2 logs، باید حتما اپلیکیشن خود را در قسمت Nodejs Application  ایجاد کرده باشید و اگر در قسمت  Setup Nodejs App ایجاد شده باشد نمی توانید pm2 logs استفاده کنید و برای استفاده از این دستور باید پروژه خود را از قسمت Setup Nodejs App حذف و در در قسمت Nodejs Application ایجاد و راه اندازی کنید .

فرمت خطای نمایش داده شده در ترمینال یکسان هست و با این فرمت نمایش داده می شود که کار را برای ما آسان می کند.

“Module not found: Error: Can’t resolve ‘package name‘ in ‘project directory”.

در پیام خطا، نام پکیجی که  مربوط به خطا هست را نمایش می دهد و اشاره می کند که فولدر نصب پکیج کجاست.

برای حل این مشکل باید پکیجی که در خطا به آن اشاره شده است را در محیط ترمینال نصب کنیم

npm install package-name

به جای package-name   نام پکیجی که در خطا وجود دارد را وارد می کنیم تا پکیج مورد نیاز اپلیکیشن ما نصب شود.

بعد از نصب موفق پکیج، پروژه خود را ریلود می کنیم و در مرورگر اپلیکیشن خود را تست و بررسی می کنیم.

اگر همچنان پروژه شما ارور داشت و با نصب پکیج مورد نیاز، مشکل رفع نشد و پروژه اجرا نشد، در قدم بعدی اقدامات زیر را انجام می دهیم.

1-دستور زیر را در محیط ترمینال اجرا می کنیم :

rm -rf node_modules

با اجرای این دستور، فولدر node_modules   را از روی هاست  پاک می‌کنیم. توجه داشته باشید که این دستور فقط و فقط فولدر  پکیج های نصب شده روی هاست را حذف می‌کند و به هیچ عنوان فایل های پروژه شما و یا دیتابیس شما را تحت تاثیر قرار نمی‌دهد.

2- دستور زیر را وارد و اجرا می کنیم :

rm -f package-lock.json

با این دستور ما این فایل را از روی هاست حذف می کنیم تا در مراحل بعدی فایل  جدید  package-lock.json ایجاد شود.

فایل package-lock.json به صورت خودکار در پروژه ایجاد می شود و هدف آن حفظ سازگاری بین نسخه‌هایی از برنامه هست که در جاهای مختلف نصب خواهند شد. در این فایل ورژن دقیق پکیج‌هایی که در پروژه استفاده شده ذخیره می‌شود.

وجود فایل package-lock.json هنگام اجرای دستور npm install این اطمینان را می دهد که دقیقاً همان ورژن از پکیج‌هایی برای ما نصب شوند که انتظار  آن را داریم. این کار باعث می‌شود که پروژه ما در محیط‌های مختلف و نسخه های مختلف نود جی اس، رفتارهای یکسان و قابل پیش‌بینی داشته باشد.

فایل package-lock.json علاوه‌ بر اینکه ورژن دقیق پکیج‌ها را ذخیره می‌کند، جزییاتی مثل Dependency های  پکیج و آدرس URL  که پکیج باید از آن لینک دانلود شود را هم ذخیره می‌کند.

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

3- دستور زیر را بعد از اجرای دستور قبلی اجرا می کنیم :

npm cache clean --force

تمامی داده‌های فولدر کش را npm  خالی و پاک می شود.  طبق مستندات سایت npmjs.com، با اینکه تمامی عملیات لازم در مورد کش (مثلا اعتبارسنجی، تشخیص خطا در پکیج‌ها و پاک کردن کش در صورت لزوم) توسط خود npm انجام می‌گیرد، معمولاً نیازی به پاک کردن کش npm نیست و تنها دلیل منطقی برای این کار، پاک کردن حافظه است.

به همین دلیل در نسخه‌های جدیدتر npm، دستور npm cache clean به تنهایی کار نمی‌کند و در کنار آن حتماً باید گزینه force– را هم بکار برد.

با این وجود وقتی پکیجی را نصب می‌کنیم که انتظار داریم بدون مشکل کار کند ولی درست کار نمی‌کند، یکی از راه‌حل‌های احتمالی پاک کردن کش است.

4- و در آخر  ،دستور زیر را در ترمینال وارد و اجرا می کنیم تا پکیج ها از نو نصب شود.

npm install

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

اگر در زمان نصب یک یا دو پکیج نصب نشد، ورژن نود رو تغییر میدهیم و دوباره یکی از نسخه های نود جی اس را  نصب می کنیم.

چنانچه شما تجربه ای در این زمینه دارید که فکر می کنید سایر کاربران می توانند از آن استفاده کنند و یا اگر نکته ای ناگفته ماند از بخش نظرات مطرح بفرمایید.
و اگر احیانا خطای پروژه شما رفع نشد می توانید تیکت بزنید (ارسال تیکت) تا همکاران واحد فنی، پروژه شما را بررسی و راهنمایی های لازم خدمت شما ارائه شود.

 

5/5 - (1 امتیاز)
دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *