التعامل مع ملف التهيئة next.config.js في Next.js
بإمكانك إنشاء الملف next.config.js
أو next.config.mjs
في جذر مشروعك وإلى جوار الملف package.json
، إن كنت ترغب في تطبيق إعدادت متقدمة على تطبيق Next.js.
يُعد الملف next.config.js
وحدة نمطية Node.js وليس ملف JSON، ويُستخدم من قبل خادم Next.js وخلال مراحل بناء التطبيق ولا يُضمَّن في تجميعة المتصفح.
إليك مثالًا عن ملف التهيئة next.config.js
:
/**
* @type {import('next').NextConfig}
*/
const nextConfig = {
/* ضع الإعدادات هنا */
}
module.exports = nextConfig
إن احتجت إلى وحدات ECMAScript بإمكانك استخدام الملف:
/**
* @type {import('next').NextConfig}
*/
const nextConfig = {
/* ضع الإعدادات هنا */
}
export default nextConfig
بإمكانك استخدام دالة أيضًا:
module.exports = (phase, { defaultConfig }) => {
/**
* @type {import('next').NextConfig}
*/
const nextConfig = {
/* ضع الإعدادات هنا */
}
return nextConfig
}
يمكن ابتداءً بالنسخة 12.1.0 استخدام دالة متزامنة:
module.exports = async (phase, { defaultConfig }) => {
/**
* @type {import('next').NextConfig}
*/
const nextConfig = {
/* ضع الإعدادات هنا */
}
return nextConfig
}
يُعد السياق phase
هو السياق الحالي لتحميل الإعدادات وتواجد سياقات أخرى أيضًا. يمكن إدراج المراحل phases من الوحدة next/constants
:
const { PHASE_DEVELOPMENT_SERVER } = require('next/constants')
module.exports = (phase, { defaultConfig }) => {
if (phase === PHASE_DEVELOPMENT_SERVER) {
return {
/* ضع إعدادات مرحلة التطوير هنا */
}
}
return {
/* ضع إعدادات كل المراحل هنا ما عدا مرحلة التطوير */
}
}
تُوضع الإعدادات المسموحة) في next.config.js
مكان أسطر التعليقات في الشيفرات السابقة. مع ذلك، لا حاجة إلى أية إعدادات، وليس من الضرورة فهم عمل كل إعداد. كل ما عليك هو البحث عن الميزات التي تريد تفعيلها أو تعديلها في هذه الصفحة وستريك ما العمل.
تفادى استخدام ميزات JavaScript الجديدة في اصدار Node.js الذي تستهدفه. فلن يُحلل الملف
next.config.js
من قبل Webpack أو Babel أو TypeScript.
متغيرات البيئة
تقدم ابتداءً من الإصدار تجربة تعليمية وعملية في إضافة متغيرات البيئة. حاول أن تجربها.
لإضافة متغيرات بيئة إلى تجميعة JavaScript، افتح الملف next.config.js
وأضف الإعداد env
:
module.exports = {
env: {
customKey: 'my-value',
},
}
بإمكانك الآن الوصول إلى process.env.customKey
في شيفرتك. إليك مثالًا:
function Page() {
return <h1>The value of customKey is: {process.env.customKey}</h1>
}
export default Page
تستبدل Next.js أثناء البناء المفاتيح process.env.customKey
بالقيمة 'my-value'
. وانتبه إلى أنك لن تستطيع تفكيك متغيرات process.env
نظرًا لطبيعة الإضافة DefinePlugin في webpack. فلو ألقينا نظرة مثلًا على السطر البرمجي التالي:
return <h1>The value of customKey is: {process.env.customKey}</h1>
سينتهي الأمر على النحو:
return <h1>The value of customKey is: {'my-value'}</h1>
المسار الأساسي
بإمكانك استخدام الإعداد basePath
لنشر تطبيق Next.js ضمن مسار فرعي لنطاق، إذ يسمح لك هذا الإعداد بضبط بادئة للمسار في تطبيقك. ولكي تستخدم مثلًا المسار docs/
بدلًا من المسار الأساسي الافتراضي /
، افتح الملف next.config.js
وأضف الإعداد basePath
كالتالي:
module.exports = {
basePath: '/docs',
}
ملاحظة: لا بد من ضبط هذه القيمة أثناء البناء ولا يمكن تغييرها دون إعادة بناء التطبيق، لأن القيمة ستضاف مباشرة إلى تجميع الشيفرة الخاصة بجانب العميل.
الروابط
عند ربط الصفحة بغيرها باستخدام next/link
و next/router
سيُطبق الإعداد basePath
تلقائيًا. إذ سيتحول على سبيل المثال المسار about/
إلى docs/about/
تلقائيًا عند ضبط قيمة الإعداد basePath
على docs/
.
export default function HomePage() {
return (
<>
<Link href="/about">
<a>About Page</a>
</Link>
</>
)
}
وسيكون خرج HTML كالتالي:
<a href="/docs/about">About Page</a>
يضمن ذلك أنك لن تُضطر إلى تغيير كل الروابط في تطبيقك عند تغيير قيمة الإعداد basePath
.
الصور
لا بد من إضافة قيمة الإعداد basePath
قبل قيمة الخاصية src
إن كنت تريد استخدام المكوّن next/image
. فالمسار docs/me.png/
سيخدّم صورتك بالشكل الصحيح إن قررت أن تكون قيمة الإعداد basePath
هي docs/
.
import Image from 'next/image'
function Home() {
return (
<>
<h1>My Homepage</h1>
<Image
src="/docs/me.png"
alt="Picture of the author"
width={500}
height={500}
/>
<p>Welcome to my homepage!</p>
</>
)
}
export default Home
المصادر
- الصفحات Next.config.js من توثيق Next.js الرسمي.