وبلاگ نت‌آرامآموزش، تجربه و راهکارهای زیرساخت

رفع Cannot find module در هاست Node.js؛ پکیج نصب شده اما برنامه اجرا نمی‌شود

آموزش پیدا کردن ماژول گمشده Node.js، بررسی محیط برنامه و package.json، تفاوت devDependencies و مسیر فایل‌های پروژه.

انتشار:
توسط تیم فنی نت‌آرام
۷ دقیقه زمان مطالعه
۰ دیدگاه
محتوای تخصصی، ساده و کاربردی
هماهنگ با هویت حرفه‌ای نت‌آرام
بازگشت به لیست مقالات
تصویر شاخص مقاله رفع Cannot find module در هاست Node.js؛ پکیج نصب شده اما برنامه اجرا نمی‌شود در وبلاگ نت‌آرام
محتوای آموزشی وبلاگ نت‌آرام
برنامه Node.js بعد از انتقال به هاست بالا نمی‌آید و در گزارش خطا می‌بینید Cannot find module. شاید بسته را قبلاً نصب کرده باشید یا پروژه روی لپ‌تاپ درست کار کند. این خطا همیشه به معنی «فقط یک بار npm install بزنید» نیست: برنامه ممکن است از پوشه یا محیط دیگری اجرا شود، بسته در وابستگی‌های زمان اجرا ثبت نشده باشد یا یکی از فایل‌های پروژه با نام متفاوت منتقل شده باشد.
در ادامه از روی متن خطا مشخص می‌کنیم دنبال بسته بیرونی هستیم یا فایل داخلی، بعد محل نصب و روش اجرای برنامه را مقایسه می‌کنیم. نمونه‌ها برای هاست لینوکسی و Node.js با پنل مدیریت برنامه هستند. روی سرور مستقل روش مدیریت سرویس و مسیرها می‌تواند متفاوت باشد.

۱. نام گمشده و فایل درخواست‌کننده را بخوانید

در پنل برنامه به گزارش خطا بروید و خط مربوط به آخرین تلاش را پیدا کنید. برای نمونه:
کد / دستورError: Cannot find module 'express' Require stack: - /home/user/myapp/server.js
در این مثال express نام یک بسته بیرونی است و server.js فایلی است که آن را درخواست کرده. اگر متن به‌شکل Cannot find module './routes/users' باشد، مسیر نسبی به یکی از فایل‌های خود پروژه اشاره می‌کند و راه تشخیص متفاوت است. مسیر و نام واقعی خطای خودتان را یادداشت کنید. بخش‌های دیگر گزارش، مثل رمز یا نشانی دارای توکن، نباید در تصویر یا گزارش عمومی بمانند.
اگر گزارش برنامه را پیدا نمی‌کنید، در Setup Node.js App یا پنل معادل، برنامه و مسیر لاگ آن را مشخص کنید. صفحه عمومی خطای ۵۰۰ به‌تنهایی ثابت نمی‌کند مشکل از ماژول است. قبل از هر تغییر از نسخه فعلی کد، فایل قفل و تنظیمات امکان بازگشت نگه دارید.

۲. مسیر برنامه و نسخه Node.js را مشخص کنید

در صفحه مدیریت برنامه، مقدار Application root، نسخه Node.js، حالت اجرا و فایل شروع را یادداشت کنید. اگر پنل فرمان ورود به محیط برنامه را نمایش می‌دهد، همان فرمان اختصاصی حساب را در Terminal یا SSH اجرا کنید. سپس به مسیر واقعی برنامه بروید. نمونه زیر فقط یک مسیر فرضی است:
کد / دستورcd ~/my-node-app pwd node --version npm --version ls -la package.json package-lock.json
این فرمان‌ها مسیر، نسخه ابزار و وجود فایل‌های پروژه را نشان می‌دهند. اگر package.json پیدا نشد، ابتدا Application root و مسیری را که کد به آن منتقل شده تطبیق دهید. وجود چند پوشه مانند myapp و myapp-old می‌تواند باعث نصب بسته در یک پوشه و اجرای برنامه از پوشه دیگر شود.
در بعضی سرویس‌های مبتنی بر Node.js Selector، node_modules یک مسیر مدیریت‌شده یا پیوند است. آن را بی‌اطلاع حذف، جایگزین یا از رایانه کپی نکنید؛ روش نصب همان پنل را دنبال کنید. ترمینال حساب و برنامه‌ای که وب‌سرور اجرا می‌کند هم لزوماً محیط یکسان ندارند.

۳. بسته بیرونی را در همین پروژه بررسی کنید

برای مثال express، از ریشه همان پروژه دستورهای زیر را اجرا کنید. در خطای واقعی نام بسته را جایگزین کنید:
کد / دستورnpm ls express node -p 'require.resolve("express")'
فرمان اول جایگاه بسته را در درخت npm نشان می‌دهد و در صورت وابستگی ناسالم ممکن است خودش خطا برگرداند. فرمان دوم تلاش می‌کند مسیر قابل حل بسته را از محل همین اجرای Node.js پیدا کند. اگر مسیر چاپ شد، بسته از این نقطه قابل شناسایی است؛ ولی چون Node.js جست‌وجوی ماژول را نسبت به فایل درخواست‌کننده انجام می‌دهد، موفقیت این آزمایش از یک پوشه الزاماً موفقیت فایل دیگری در ساختار متفاوت را ثابت نمی‌کند.
اگر فرمان بسته را پیدا نمی‌کند، ببینید آیا express در بخش وابستگی‌های package.json پروژه ثبت شده است. بسته موردنیاز زمان اجرای سایت باید در وابستگی‌های مناسب اجرای آن قرار گیرد؛ بسته‌ای که فقط در devDependencies است ممکن است در نصب production حضور نداشته باشد. جابه‌جایی یا افزودن بسته را در نسخه توسعه و با نسخه سازگار پروژه انجام دهید و پس از اجرای آزمون‌ها، package.json و فایل قفل هماهنگ را با هم منتشر کنید. نصب آخرین نسخه دلخواه مستقیماً روی سایت زنده ممکن است ناسازگاری بسازد.
اگر پروژه و نسخه بسته را می‌شناسید، مستندات npm استفاده از فرمانی مانند زیر را برای ثبت وابستگی زمان اجرا توضیح می‌دهد. این مثال را ابتدا در نسخه آزمایشی پروژه اجرا کنید، نه روی تنها نسخه سالم سایت:
کد / دستورnpm install --save-prod express npm ls express
نخستین فرمان می‌تواند فایل‌های پروژه و نسخه نصب‌شده را تغییر دهد؛ تغییرات، فایل قفل و سازگاری را پیش از انتقال بررسی کنید. اگر پروژه فایل قفل دارد و خطای هماهنگ‌نبودن آن را می‌بینید، راهنمای رفع ناسازگاری npm ci مسیر جداگانه‌ای ارائه می‌کند.

۴. نصب را از روش پشتیبانی‌شده پنل انجام دهید

پس از انتقال نسخه تأییدشده فایل‌ها، در صفحه مدیریت همان برنامه روش نصب وابستگی‌های موجود را اجرا کنید؛ ممکن است دکمه‌ای مانند Run NPM Install ارائه شده باشد. نام و عملکرد دقیق به پنل وابسته است. اگر روش خط فرمان برای سرویس شما مجاز است، ابتدا محیط اختصاصی برنامه را فعال و پوشه درست را انتخاب کنید. نتیجه نصب را کامل بخوانید؛ شروع‌شدن عملیات به معنی موفقیت آن نیست.
اگر نصب با خطای فضای کافی، حافظه، شبکه یا دسترسی فایل شکست خورد، همان خطا را برطرف کنید. برای نمونه EACCES را با دادن دسترسی همگانی به همه فایل‌ها یا اجرای sudo npm روی هاست اشتراکی رفع نکنید. در صورت نیاز، متن خطا، زمان و نام برنامه را بدون رمز برای پشتیبانی ارسال کنید.

۵. اگر ماژول فایل داخلی پروژه است

در مثال ./routes/users، مسیر از محل فایل درخواست‌کننده محاسبه می‌شود. فرض کنید آن فایل واقعاً server.js در ریشه برنامه است؛ بررسی زیر به یافتن فایل کمک می‌کند:
کد / دستورpwd ls -la ls -la routes
به نام دقیق فایل نگاه کنید. در لینوکس Users.js و users.js متفاوت‌اند، حتی اگر روی بعضی رایانه‌ها هر دو در آزمایش ظاهراً کار کنند. اگر پروژه از TypeScript ساخته می‌شود، ممکن است برنامه به فایل داخل dist نیاز داشته باشد اما مرحله build اجرا نشده یا خروجی آن منتقل نشده باشد. فایل شروع تنظیم‌شده در پنل را با خروجی واقعی ساخت مقایسه کنید. ساخت و انتشار را در نسخه آزمایشی بررسی کنید و فقط پس از تأیید جایگزین نسخه فعال کنید.
برای ماژول‌های ES و CommonJS، پسوند و روش import نیز بسته به نوع پروژه و نسخه Node.js مهم است. اگر متن خطا به جای نبود فایل، درباره ERR_REQUIRE_ESM یا ناسازگاری نسخه است، نام فایل را تصادفی عوض نکنید؛ تنظیم type و مستندات بسته را متناسب با نسخه برنامه بررسی کنید.

۶. نتیجه را در خود برنامه تأیید کنید

در پنل، همان برنامه را Restart کنید و مسیر واقعی سایت یا API را امتحان کنید. گزارش جدید را با زمان درخواست بخوانید. اگر خطا تغییر کرده، آن را جداگانه دنبال کنید؛ پیدا شدن یک بسته به معنی سالم‌بودن اتصال دیتابیس یا بقیه فایل‌ها نیست. پس از اطمینان، فایل‌ها و نسخه قبلی را تا پایان دوره بازگشت موردنیاز نگه دارید.
برای بررسی امکانات سرویس، صفحه هاست Node.js نت‌آرام را ببینید. توضیح رسمی تفاوت وابستگی توسعه و اجرا در مستندات npm و روش پیدا شدن ماژول‌ها در مستندات Node.js آمده است.
اشتراک‌گذاری:
لینکدینتلگرامایکس

دیدگاه‌ها (۰)

دیدگاه‌های تاییدشده و پاسخ‌های تیم نت‌آرام