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

پوشه dist بعد از انتقال TypeScript پیدا نمی‌شود؛ راه‌اندازی درست در هاست Node.js

آموزش تشخیص نبود dist، ساخت TypeScript و تنظیم مسیر فایل شروع صحیح در هاست Node.js.

انتشار:
توسط تیم فنی نت‌آرام
۵ دقیقه زمان مطالعه
۰ دیدگاه
محتوای تخصصی، ساده و کاربردی
هماهنگ با هویت حرفه‌ای نت‌آرام
بازگشت به لیست مقالات
تصویر شاخص مقاله پوشه dist بعد از انتقال TypeScript پیدا نمی‌شود؛ راه‌اندازی درست در هاست Node.js در وبلاگ نت‌آرام
محتوای آموزشی وبلاگ نت‌آرام
کد TypeScript را روی هاست قرار داده‌اید، ولی برنامه دنبال فایلی مانند dist/server.js می‌گردد و خطای Cannot find module می‌دهد. معمولاً فایل خروجی ساخته نشده، در پوشه دیگری قرار گرفته یا فایل شروع پنل با مسیر خروجی یکسان نیست. گاهی هم ساخت به خطا خورده، اما پوشه قدیمی باقی مانده و باعث اشتباه می‌شود.
این راهنما فرض نمی‌کند هر پروژه حتماً dist/server.js دارد. ابتدا تنظیمات خود پروژه را می‌خوانیم، بعد در نسخه آزمایشی خروجی را می‌سازیم و با فایل شروع واقعی مقایسه می‌کنیم.

۱. پوشه و دستور پروژه را پیدا کنید

در Terminal یا SSH هاست، وارد کپی آزمایشی پروژه شوید:
کد / دستورcd ~/myapp-test pwd ls -la cat package.json
مسیر را با مسیر آزمایشی واقعی عوض کنید. در package.json بخش scripts را ببینید. برای نمونه، ممکن است build دستور tsc و start دستور node dist/server.js باشد. این مثال قانون همه پروژه‌ها نیست؛ یک فریم‌ورک ممکن است خروجی یا فرمان شروع متفاوتی داشته باشد. فایل تنظیمات را قبل از تغییر پشتیبان بگیرید و اطلاعات محرمانه را منتشر نکنید.
حالا فایل‌های مرتبط و پوشه خروجی را ببینید:
کد / دستورls -la tsconfig.json ls -la dist
اگر dist وجود ندارد، خروجی دستور دوم خطا می‌دهد؛ این فقط یعنی آن پوشه در مسیر فعلی نیست. اگر پروژه از چند تنظیم یا monorepo استفاده می‌کند، ممکن است فایل tsconfig و خروجی داخل زیرپوشه دیگری باشد.

۲. تنظیم خروجی و ورودی را با هم بخوانید

در tsconfig.json به outDir، rootDir، include، exclude و گزینه‌هایی مانند noEmit و emitDeclarationOnly توجه کنید. outDir مقصد خروجی است و ساختار مسیر نسبت به rootDir می‌تواند مشخص کند فایل دقیقاً کجا قرار می‌گیرد. مقدار پیش‌فرض rootDir بین نسخه‌های TypeScript و نوع اجرای کامپایل متفاوت است؛ به جای حدس، خروجی نسخه پروژه را ببینید.
برای مثال، اگر کد src/server.ts و خروجی واقعاً dist/server.js است، فرمان شروع باید به همان فایل برسد. در پروژه‌ای دیگر خروجی می‌تواند dist/src/server.js باشد. noEmit: true برای بررسی نوع‌ها خروجی JavaScript تولید نمی‌کند؛ فعال بودن آن همیشه خطا نیست، شاید ساخت واقعی توسط ابزار دیگری انجام شود.

۳. وابستگی‌ها و build را در نسخه آزمایشی اجرا کنید

نسخه Node و ابزار مورد انتظار پروژه را طبق مستنداتش در پنل انتخاب کنید. سپس در پوشه آزمایشی:
کد / دستورnode --version npm --version ls -la package.json package-lock.json npm ci npm run build
npm ci به فایل قفل هماهنگ نیاز دارد و node_modules موجود همان پوشه را حذف می‌کند؛ روی نسخه فعال اجرا نکنید. این فرمان ممکن است اسکریپت نصب بسته‌ها را اجرا کند، پس فقط کد و وابستگی مورد اعتماد را نصب کنید. اگر فایل قفل ندارید یا پروژه از ابزار دیگری استفاده می‌کند، روش تأییدشده همان پروژه را به کار ببرید.
اگر پیام tsc: not found دیدید، بررسی کنید TypeScript در وابستگی‌های توسعه تعریف شده و نصب توسعه در محیط build حذف نشده باشد. در بعضی تنظیمات NODE_ENV=production باعث حذف devDependencies می‌شود. به جای نصب سراسری تصادفی، ساخت را با وابستگی‌های لازم در محیط build و مطابق فایل قفل پروژه انجام دهید؛ برای نسخه‌ای از npm که پشتیبانی می‌کند، npm ci --include=dev در کپی آزمایشی می‌تواند انتخاب باشد.
اگر npm run build خطا داد، چند خط اول خطای TypeScript را رفع کنید و دوباره بسازید. پوشه قدیمی به معنی موفقیت build جدید نیست. روی پروژه زنده فقط برای امتحان پوشه خروجی را حذف نکنید؛ از کپی تازه و مجزا استفاده کنید.

۴. فایل واقعی را پیدا و مسیر شروع را هماهنگ کنید

در مثال پوشه dist:
کد / دستورfind dist -maxdepth 4 -type f -name '*.js' -print
نام فایل خروجی را از نتیجه بردارید و با اسکریپت start و فیلد فایل شروع در پنل مقایسه کنید. مسیر پنل اغلب نسبت به Application root حساب می‌شود، اما رفتار دقیق به ارائه‌دهنده و روش اجرای برنامه بستگی دارد. اگر فایل زیر dist/src ساخته شده، قبل از تغییر rootDir بررسی کنید سایر importها و فایل‌های پروژه به ساختار فعلی وابسته نباشند.
پشتیبانی پنل از Passenger، فایل شروع یا نوع برنامه را در مستندات سرویس چک کنید. برخی برنامه‌ها باید به process.env.PORT گوش دهند و برخی پنل‌ها روش اختصاصی دارند؛ عدد پورت ثابت را از یک آموزش عمومی کپی نکنید. اگر برنامه Next.js است، روش خروجی آن با tsc ساده فرق دارد؛ راهنمای استقرار Next.js را ببینید.

۵. اجرای درست را تأیید کنید

نسخه آزمایشی را با روش پنل اجرا کنید، گزارش شروع را ببینید و یک قابلیت واقعی مرتبط با برنامه را آزمایش کنید. اگر فایل پیدا شد ولی خطای جدید ERR_REQUIRE_ESM یا متغیر محیطی دیدید، اکنون مسئله جداگانه سازگاری ماژول یا تنظیم محیط است. بعد از قبولی آزمون، نسخه جدید را طبق روند استقرار خود فعال کنید و نسخه قبلی را برای بازگشت نگه دارید.
در هاست Node.js نت‌آرام مشخصات سرویس را ببینید. شرح رسمی تنظیمات خروجی در راهنمای TSConfig آمده است.
اشتراک‌گذاری:
لینکدینتلگرامایکس

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

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