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

اگر شما تجربه کار بر روی پروژه های نود جی اس رو داشته باشید و با کتابخانه ها نود جی اس و جاوا اسکریپت و فریمورک هایی مثل vue , angular و react کار کرده باشید حتما با ارور “Error: cannot find module” مواجه شدید و این پیام را در هنگام دباگ پروژه نود جی اس خود مشاهده کردید.
در این آموزش دلیل نمایش این خطا و همینطور راه حل رفع این خطا را با هم مرور خواهیم کرد تا با استفاده از این مطالب این خطا را در پروژه های نود جی اس خود رفع کنیم.
مشاهده خطای پروژه در ترمینال با استفاده از pm2
برای وارد شدن در محیط ترمینال، در سی پنل لاگین می کنیم (آموزش لاگین به سی پنل) و به تب advance می رویم و روی گزینه terminal کلیک می کنیم.
با کلیک بر روی گزینه terminal وارد ترمینال می شویم و می توانیم دستورات نود جی اس را وارد و اجرا کنیم .
برای مشاهده و بررسی ارور لاگ وارد محیط ترمینال شده و دستور 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
بعد از اینکه تمامی پکیج ها به طور کامل نصب شدند، پروژه خود را ریلود می کنیم و با کارهایی که انجام دادیم باید خطای پروژه ما رفع شده باشد و پروژه ما به درستی اجر شود و خطای دیگری در لاگ نمایش داده نشود.
اگر در زمان نصب یک یا دو پکیج نصب نشد، ورژن نود رو تغییر میدهیم و دوباره یکی از نسخه های نود جی اس را نصب می کنیم.
چنانچه شما تجربه ای در این زمینه دارید که فکر می کنید سایر کاربران می توانند از آن استفاده کنند و یا اگر نکته ای ناگفته ماند از بخش نظرات مطرح بفرمایید.
و اگر احیانا خطای پروژه شما رفع نشد می توانید تیکت بزنید (ارسال تیکت) تا همکاران واحد فنی، پروژه شما را بررسی و راهنمایی های لازم خدمت شما ارائه شود.

افزایش امنیت وردپرس با Authentication unique keys and salts

آموزش ایجاد کلید ssh key در لینوکس

آموزش فعالسازی SSL در هاست

ساخت دیتابیس مونگو دی بی و اتصال به studio 3t

فعال کردن extension های php در cPanel

جلوگیری از ارتباط لینک های خارجی پیشخوان وردپرس

مشاهده لاگ های سایت در Raw Access سی پنل

معرفی سرویس Webalizer در سی پنل

معرفی سرویس آمار سی پنل Awstats

معرفی سرویس Virus Scanner در سی پنل

معرفی قابیلت Track DNS در سرویس های سی پنل

معرفی بخش BoxTrapper در سی پنل

قابلیت Greylisting در سی پنل

آموزش مسدود سازی IP با استفاده از IP Blocker سی پنل

ایجاد رکوردهای DNS در ZoneEditor سی پنل

بررسی Bandwidth در سرویس سی پنل

کد EPP چیست

جلوگیری از دریافت ایمیل های خاص در سی پنل

آموزش ایجاد ساب دامنه در هاست سی پنل

آموزش مدیریت فضای ایمیل سی پنل

آموزش رفع ارور 502 Bad gateway

افزایش امنیت وردپرس با Authentication unique keys and salts

آموزش ایجاد کلید ssh key در لینوکس

نصب پکیج های پایتون از مخازن جایگزین pip

راهنمای رفع خطای ENOENT در نود جی اس (Nodejs Enoent eror)

راهنمای تنظیمات smtp برای لاراول

راهنمای استفاده از مونگو دی بی در پایتون – MongoDB in Python

چرخه حیات دامنه های بین المللی و آی آر

راهنمای حذف و خالی کردن کش در لاراول

کد تخفیف هفتگی برای خرید های جدید
