میتوانید فایلهای استاتیک، مانند تصاویر و فونتها را در پوشهای به نام public در ریشه پروژه ذخیره کنید. فایلهای داخل public از طریق URL پایه (/) در کد قابل ارجاع هستند.
┌─────────────────────┐ │ Project │ ├──────────┬──────────┤ │ app/ │ public/ │ │ page.tsx│ profile. │ │ │ png │ └──────────┴──────────┘ ساختار پوشهها با پوشههای app و public
import Image from 'next/image'
export default function Page() {
return (
<Image
src="/profile.png"
alt="تصویر نویسنده"
width={500}
height={500}
/>
)
}
اگر تصویر به صورت استاتیک import شود، Next.js به طور خودکار عرض (width) و ارتفاع (height) ذاتی (intrinsic) را تعیین میکند. این مقادیر برای تعیین نسبت ابعاد تصویر و جلوگیری از Cumulative Layout Shift در حین بارگذاری تصویر استفاده میشوند.
import Image from 'next/image'
import ProfileImage from './profile.png'
export default function Page() {
return (
<Image
src={ProfileImage}
alt="تصویر نویسنده"
// width={500} به صورت خودکار فراهم میشود
// height={500} به صورت خودکار فراهم میشود
// blurDataURL="data:..." به صورت خودکار فراهم میشود
// placeholder="blur" // blur-up اختیاری در حین بارگذاری
/>
)
}
اگر نمیتوانید از import استاتیک برای تصاویر خود استفاده کنید، میتوانید در یک Server Component از import() پویا (dynamic) استفاده کنید تا همچنان width، height و blurDataURL به صورت خودکار دریافت شوند:
import Image from 'next/image'
async function PostImage({
imageFilename,
alt,
}: {
imageFilename: string
alt: string
}) {
const { default: image } = await import(
`../content/blog/images/${imageFilename}`
)
// image شامل width، height و blurDataURL است
return <Image src={image} alt={alt} />
}
اگر path alias پیکربندی شده باشد (مثلاً @/)، میتوانید به جای مسیر نسبی از آن استفاده کنید:
const { default: image } = await import(
`@/content/blog/images/${imageFilename}`
)
مسیر باید یک پیشوند استاتیک (مانند ../content/blog/images/) داشته باشد. تا حد امکان دقیق باشید، زیرا تمام فایلهای مطابق با آن پیشوند بستهبندی (bundle) میشوند. فقط فایلهای داخل پوشه مشخص شده شامل میشوند، بنابراین ورودیهای خارجی نمیتوانند فراتر از آن دسترسی پیدا کنند.
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://nextjs.org/docs/app