كيفية إعداد خادم مخصص في Next.js
يتضمن Next.js خادمه الخاص مع next start
افتراضيًا. إذا كان لديك خادم خلفي موجود، فلا يزال بإمكانك استخدامه مع Next.js (هذا ليس خادمًا مخصصًا). يسمح لك خادم Next.js المخصص ببدء خادم لأنماط مخصصة برمجيًا. في معظم الأحيان، لن تحتاج إلى هذه الطريقة. ومع ذلك، فهي متاحة إذا كنت بحاجة إلى إخراج.
من الجيد معرفة:
- قبل اتخاذ قرار استخدام خادم مخصص، ضع في اعتبارك أنه يجب استخدامه فقط عندما لا يستطيع الموجِّه المدمج في Next.js تلبية متطلبات تطبيقك. سيؤدي الخادم المخصص إلى إزالة تحسينات الأداء المهمة، مثل التحسين الثابت التلقائي (Automatic Static Optimization).
- عند استخدام وضع الإخراج المستقل، فإنه لا يتتبع ملفات الخادم المخصصة. بدلاً من ذلك، يخرج هذا الوضع ملف
server.js
منفصلًا صغيرًا. لا يمكن استخدام هذه معًا.
ألق نظرة على المثال التالي لخادم مخصص:
import { createServer } from 'http'
import { parse } from 'url'
import next from 'next'
const port = parseInt(process.env.PORT || '3000', 10)
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()
app.prepare().then(() => {
createServer((req, res) => {
const parsedUrl = parse(req.url!, true)
handle(req, res, parsedUrl)
}).listen(port)
console.log(
`> Server listening at http://localhost:${port} as ${
dev ? 'development' : process.env.NODE_ENV
}`
)
})
import { createServer } from 'http'
import { parse } from 'url'
import next from 'next'
const port = parseInt(process.env.PORT || '3000', 10)
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()
app.prepare().then(() => {
createServer((req, res) => {
const parsedUrl = parse(req.url, true)
handle(req, res, parsedUrl)
}).listen(port)
console.log(
`> Server listening at http://localhost:${port} as ${
dev ? 'development' : process.env.NODE_ENV
}`
)
})
لا يتم تشغيل
server.js
من خلال محول Next.js أو عملية التجميع. تأكد من أن بناء الجملة وكود المصدر الذي يتطلبه هذا الملف متوافق مع إصدار Node.js الحالي الذي تستخدمه. عرض مثال.
لتشغيل الخادم المخصص، ستحتاج إلى تحديث scripts
في package.json
كما يلي:
{
"scripts": {
"dev": "node server.js",
"build": "next build",
"start": "NODE_ENV=production node server.js"
}
}
بدلاً من ذلك، يمكنك إعداد nodemon
(مثال). يستخدم الخادم المخصص الاستيراد التالي لربط الخادم بتطبيق Next.js:
import next from 'next'
const app = next({})
استيراد next
أعلاه هو دالة تستقبل كائنًا مع الخيارات التالية:
الخيار | النوع | الوصف |
---|---|---|
conf | Object | نفس الكائن الذي ستستخدمه في next.config.js . الافتراضي هو {} |
dev | Boolean | (اختياري) ما إذا كان سيتم تشغيل Next.js في وضع التطوير أم لا. الافتراضي هو false |
dir | String | (اختياري) موقع مشروع Next.js. الافتراضي هو '.' |
quiet | Boolean | (اختياري) إخفاء رسائل الخطأ التي تحتوي على معلومات الخادم. الافتراضي هو false |
hostname | String | (اختياري) اسم المضيف الذي يعمل عليه الخادم |
port | Number | (اختياري) المنفذ الذي يعمل عليه الخادم |
httpServer | node:http#Server | (اختياري) خادم HTTP الذي يعمل عليه Next.js |
turbo | Boolean | (اختياري) تمكين Turbopack |
يمكن بعد ذلك استخدام app
الذي تم إرجاعه للسماح لـ Next.js بمعالجة الطلبات حسب الحاجة.