next

پلتفرم NextJS

(NextJS Platform)

🎯 توضیحات و نکات تکمیلی

فهرست عناوین:

بیلد متغیر‌های محیطی برای مرورگر

با اضافه شدن قابلیت لود متغیرهای محیطی در برنامه‌های NextJS، این امکان فراهم شده تا با قرار دادن پیشوند NEXT_PUBLIC_ برای متغیرها، در سمت مرورگر نیز به متغیرهای محیطی دسترسی پیدا کنید. برای تعریف و استفاده از این متغیرها در لیارا، می‌بایست متغیر‌های برنامه‌تان را در بخش تنظیمات پنل برنامه‌تان با پیشوند NEXT_PUBLIC_ تعریف کرده تا در هنگام بیلد، به آن‌ها دسترسی داشته باشید.

توجه داشته باشید که متغیر‌های تعریف شده در بخش تنظیمات پنل برنامه‌تان، بر متغیر‌های فایل.env.production اولویت دارد.

قابلیت Static HTML Export

قابلیت Static HTML Export این امکان را فراهم کرده تا شما از برنامه‌های NextJS خود، خروجی static HTML بگیرید و دیگر نیازی به سرور NodeJS نخواهید داشت. همچنین خروجی نهایی تقریبا از تمام ویژگی‌های ارائه شده در NextJS مانند dynamic routes، prefetching، preloading و dynamic imports پشتیبانی می‌کند اما این روش مناسب صفحه‌های لندینگ، وبلاگ‌ها، سامانه‌های خبری و وبسایت‌های مشابه است زیرا باید داده‌های وبسایت در زمان build در دسترس باشند.

برای استفاده از این قابلیت باید اسکریپت build برنامه‌ی خود را در فایل package.json به‌شکل زیر ویرایش کنید:

"scripts": {
    "dev": "next dev",
    "build": "next build && next export",
    "start": "next start",
    "lint": "next lint"
},

همچنین توجه داشته باشید در زمان استفاده از قابلیت Static HTML Export، امکان بهینه‌سازی تصاویر وجود ندارد بنابراین باید قابلیت بهینه‌سازی تصاویر را در فایل next.config.js غیرفعال کنید:

module.exports = {
  experimental: {
    images: {
      unoptimized: true,
    },
  },
}

همچنین اگر شما از Next Image استفاده می‌کنید باید هاست‌های‌تان را در فایل next.config.jsاضافه کنید. برای مثال نمونه کد زیر به تمام هاست‌ها اجازه دسترسی می‌دهد که شما می‌توانید این مورد به صورت دلخواه تغییر بدید.

module.exports = {
  experimental: {
    images: {
      remotePatterns: [
        {
          protocol: "https",
          hostname: "**",
        },
      ],
    },
  },
}

درنهایت دستور npm run build را اجرا کنید تا خروجی‌های نهایی در مسیر پیش‌فرض out قرار بگیرند.

حال برای استقرار خروجی نهایی در لیارا کافیست که یک برنامه‌ی Static در پنل کاربری خود ایجاد کرده و برنامه‌ی خود را با اجرای دستور liara deploy --path out بر روی لیارا مستقر کنید.

جلوگیری از اعمال تغییرات در فایل next.config.js

لیارا به‌صورت خودکار فایلnext.config.jsبرنامه‌ی شما را پیدا کرده و در این فایل، تنظیماتی را اضافه می‌کند تا برنامه برای اجرا آماده شود. چنانچه قصد جلوگیری از اعمال این تغییرات را دارید، باید فایل liara.json زیر را به‌ریشه‌ی برنامه‌ی‌تان اضافه کنید:

{
  "next": {
    "modifyConfig": false
  }
}

سپس کد زیر را به فایل next.config.js پروژه‌تان اضافه کنید:

module.exports = {
  // ...
  output: 'standalone',
  // ...
}
توجه داشته باشید که فقط و فقط این قابلیت را زمانی غیرفعال کنید که کاملا به‌نتایج آن آگاه باشید.

افزایش فضای مسیر Cache

فریم‌ورک Next.js به‌صورت پیش‌فرض فایل‌های کش (Cache) را در مسیر.next/cacheذخیره می‌کند. در لیارا به‌دلیل ReadOnly بودن فایل سیستم این مسیر قابل نوشتن نیست. به‌همین دلیل این مسیر به مسیر/tmpلینک شده است./tmpدر فایل‌سیستم هر برنامه، قابل نوشتن است و درواقع ReadOnly نیست، اما محدودیت ۱۰۰ مگابایتی دارد. این محدودیت به‌این معناست که اگر حجم فایل‌های کش شما بزرگ‌تر از ۱۰۰ مگابایت باشد، با خطا مواجه خواهید شد. برای رفع این محدودیت، می‌توانید از قابلیت دیسک‌ها استفاده کنید و دیسکی با اندازه‌ی دلخواه‌تان بسازید و به‌پوشه‌ی/tmpمتصل کنید.

توجه داشته باشید که استفاده از ماژول next/image باعث افزایش مصرف منابع RAM برنامه‌‌ی شما می‌شود. ولی می‌توانید طبق مستندات Next.js تنظیمات minimumCacheTTL را اعمال کنید تا فایل‌های کش (Cache) برای مدت بیشتری نگهداری شوند.

استفاده از قابلیت ISR

برای استفاده از قابلیت ISR فریم‌ورک Next.js در پلتفرم لیارا نیاز است به مسیری که صفحات ساخته شده در آن ذخیره می‌شوند، دیسک مونت کنید. چرا که فایل سیستم لیارا ReadOnly است و امکان نوشتن در آن مسیر به‌صورت پیش‌فرض وجود ندارد.
اگر از مسیر pages برای ساخت صفحات استفاده می‌کنید، نیاز است دیسک را به مسیر .next/server/pages مونت کنید. ولی در صورت استفاده از مسیر app نیاز است دیسک را به مسیر .next/server/app مونت کنید.

لازم به ذکر است که با هر بار دیپلوی یا ری‌استارت برنامه‌تون، فایل‌های کش (Cache) شده و صفحات ساخته شده در این مسیرها حذف خواهند شد.

Static Assets

در Next.js می‌توانید فایل‌های استاتیک مانند تصاویر را در یک پوشه به نامpublic در مسیر اصلی پروژه قرار دهید. سپس فایل‌های موجود در مسیرpublic از طریق روت دامنه با شروع از (/) در دسترس هستند. برای مثال اگر شما یک فایل به نام example.png در پوشه‌ی public داشته باشید، می‌توانید طبق مسیر زیر به این فایل دسترسی داشته باشید:

https://yourdomain.com/example.png

برای دسترسی به فایل example.png در سورس‌کد:


import Image from 'next/image'

export function Example() {
  return <Image src="/example.png" width="64" height="64" />
}

پوشه public برای robots.txt ،favicon.ico ،Google Site Verification مفید است. نام این پوشه حتما باید public نام‌گذاری شود و نام آن را نمی توان تغییر داد و تنها مسیری است که برای ارائه فایل‌های استاتیک استفاده می شود.

توجه داشته باشید که فقط فایل‌های استاتیکی که در پوشه‌ی public در زمان Build هستند توسط Next.js ارائه می شوند. فایل‌های اضافه شده در زمان اجرا، در دسترس نخواهند بود. برای ذخیره‌ی دائمی فایل‌ها، توصیه می‌‌شود از سرویس ذخیره‌ سازی ابری لیارا استفاده کنید.

رفع خطای ECONNRESET

این خطا به دلیل رسیدن به حداکثر محدودیت منابع رخ می‌دهد و با ارتقا پلن، رفع می‌شود.

نسخه NodeJS

در نظر داشته باشید که برنامه NextJS با نسخه NodeJS 20 در دسترس قرار می‌گیرد.

;