وقت تشغيل Edge
يحتوي Next.js على وقتين تشغيل للخادم يمكنك استخدامهما في تطبيقك:
- وقت تشغيل Node.js (الافتراضي)، الذي لديه إمكانية الوصول إلى جميع واجهات برمجة تطبيقات Node.js ويستخدم لعرض تطبيقك.
- وقت تشغيل الحافة (Edge Runtime) الذي يحتوي على مجموعة محدودة من واجهات برمجة التطبيقات، المستخدمة في الوسيط (Middleware).
محاذير
- لا يدعم وقت تشغيل الحافة جميع واجهات برمجة تطبيقات Node.js. قد لا تعمل بعض الحزم كما هو متوقع.
- لا يدعم وقت تشغيل الحافة التجديد الثابت التدريجي (ISR).
- يمكن لكلا وقت التشغيل دعم البث (streaming) اعتمادًا على محول النشر الخاص بك.
مرجع
يدعم وقت تشغيل الحافة واجهات برمجة التطبيقات التالية:
واجهات برمجة تطبيقات الشبكة
API | الوصف |
---|---|
Blob | يمثل كائن blob |
fetch | يجلب موردًا |
FetchEvent | يمثل حدث جلب |
File | يمثل ملفًا |
FormData | يمثل بيانات النموذج |
Headers | يمثل رؤوس HTTP |
Request | يمثل طلب HTTP |
Response | يمثل استجابة HTTP |
URLSearchParams | يمثل معلمات بحث URL |
WebSocket | يمثل اتصال websocket |
واجهات برمجة تطبيقات التشفير
API | الوصف |
---|---|
atob | يفك تشفير سلسلة مشفرة بـ base-64 |
btoa | يشفر سلسلة بـ base-64 |
TextDecoder | يفك تشفير Uint8Array إلى سلسلة |
TextDecoderStream | مفكك تشفير متسلسل للبث |
TextEncoder | يشفر سلسلة إلى Uint8Array |
TextEncoderStream | مشفر متسلسل للبث |
واجهات برمجة تطبيقات البث
API | الوصف |
---|---|
ReadableStream | يمثل بثًا قابلًا للقراءة |
ReadableStreamBYOBReader | يمثل قارئًا لـ ReadableStream |
ReadableStreamDefaultReader | يمثل قارئًا افتراضيًا لـ ReadableStream |
TransformStream | يمثل بث تحويل |
WritableStream | يمثل بثًا قابلًا للكتابة |
WritableStreamDefaultWriter | يمثل كاتبًا افتراضيًا لـ WritableStream |
واجهات برمجة تطبيقات التشفير
API | الوصف |
---|---|
crypto | يوفر الوصول إلى الوظائف التشفيرية للنظام |
CryptoKey | يمثل مفتاحًا تشفيريًا |
SubtleCrypto | يوفر الوصول إلى البدائيات التشفيرية الشائعة، مثل التجزئة، التوقيع، التشفير أو فك التشفير |
واجهات برمجة التطبيقات القياسية للويب (Web Standard APIs)
الواجهة البرمجية | الوصف |
---|---|
AbortController | تتيح لك إلغاء واحد أو أكثر من طلبات DOM متى ما رغبت |
Array | تمثل مصفوفة من القيم |
ArrayBuffer | تمثل مخزنًا ثابت الطول للبيانات الثنائية الخام |
Atomics | توفر عمليات ذرية كطرق ثابتة |
BigInt | تمثل عددًا صحيحًا بدقة غير محدودة |
BigInt64Array | تمثل مصفوفة منظمة من أعداد صحيحة موقعة 64-بت |
BigUint64Array | تمثل مصفوفة منظمة من أعداد صحيحة غير موقعة 64-بت |
Boolean | تمثل كيانًا منطقيًا ويمكن أن يكون لها قيمتان: true و false |
clearInterval | تلغي إجراءً متكررًا مؤقتًا تم إنشاؤه مسبقًا عن طريق استدعاء setInterval() |
clearTimeout | تلغي إجراءً متكررًا مؤقتًا تم إنشاؤه مسبقًا عن طريق استدعاء setTimeout() |
console | توفر وصولاً إلى وحدة تحكم تصحيح الأخطاء في المتصفح |
DataView | تمثل عرضًا عامًا لـ ArrayBuffer |
Date | تمثل لحظة واحدة في الوقت بتنسيق مستقل عن المنصة |
decodeURI | تفك تشفير معرف الموارد الموحد (URI) الذي تم إنشاؤه مسبقًا بواسطة encodeURI أو بواسطة روتين مشابه |
decodeURIComponent | تفك تشفير مكون معرف الموارد الموحد (URI) الذي تم إنشاؤه مسبقًا بواسطة encodeURIComponent أو بواسطة روتين مشابه |
DOMException | تمثل خطأً يحدث في DOM |
encodeURI | تشفر معرف الموارد الموحد (URI) عن طريق استبدال كل مثيل لبعض الأحرف بتسلسلات هروب تمثل ترميز UTF-8 للحرف |
encodeURIComponent | تشفر مكون معرف الموارد الموحد (URI) عن طريق استبدال كل مثيل لبعض الأحرف بتسلسلات هروب تمثل ترميز UTF-8 للحرف |
Error | تمثل خطأً عند محاولة تنفيذ عبارة أو الوصول إلى خاصية |
EvalError | تمثل خطأً يحدث فيما يتعلق بالدالة العامة eval() |
Float32Array | تمثل مصفوفة منظمة من أعداد الفاصلة العائمة 32-بت |
Float64Array | تمثل مصفوفة منظمة من أعداد الفاصلة العائمة 64-بت |
Function | تمثل دالة |
Infinity | تمثل قيمة اللانهاية الرياضية |
Int8Array | تمثل مصفوفة منظمة من أعداد صحيحة موقعة 8-بت |
Int16Array | تمثل مصفوفة منظمة من أعداد صحيحة موقعة 16-بت |
Int32Array | تمثل مصفوفة منظمة من أعداد صحيحة موقعة 32-بت |
Intl | توفر وصولاً إلى وظائف التدويل (Internationalization) والتوطين (Localization) |
isFinite | تحدد ما إذا كانت القيمة عددًا محدودًا |
isNaN | تحدد ما إذا كانت القيمة NaN أم لا |
JSON | توفر وظائف لتحويل قيم JavaScript من وإلى تنسيق JSON |
Map | تمثل مجموعة من القيم، حيث يمكن أن يظهر كل قيمة مرة واحدة فقط |
Math | توفر وصولاً إلى الدوال والثوابت الرياضية |
Number | تمثل قيمة رقمية |
Object | تمثل الكائن الذي هو أساس جميع كائنات JavaScript |
parseFloat | تحلل وسيط سلسلة نصية وتعيد رقم فاصلة عائمة |
parseInt | تحلل وسيط سلسلة نصية وتعيد عددًا صحيحًا للأساس المحدد |
Promise | تمثل الانتهاء النهائي (أو الفشل) لعملية غير متزامنة، وقيمتها الناتجة |
Proxy | تمثل كائنًا يستخدم لتعريف سلوك مخصص للعمليات الأساسية (مثل البحث عن الخاصية، التعيين، التعداد، استدعاء الدالة، إلخ) |
queueMicrotask | تضيف مهمة صغيرة (microtask) إلى قائمة الانتظار لتنفيذها |
RangeError | تمثل خطأً عندما تكون القيمة ليست في مجموعة أو نطاق القيم المسموح بها |
ReferenceError | تمثل خطأً عند الإشارة إلى متغير غير موجود |
Reflect | توفر طرقًا لعمليات JavaScript القابلة للاعتراض |
RegExp | تمثل تعبيرًا منتظمًا، مما يسمح لك بمطابقة مجموعات من الأحرف |
Set | تمثل مجموعة من القيم، حيث يمكن أن يظهر كل قيمة مرة واحدة فقط |
setInterval | تستدعي دالة بشكل متكرر، مع تأخير زمني ثابت بين كل استدعاء |
setTimeout | تستدعي دالة أو تقيم تعبيرًا بعد عدد محدد من المللي ثانية |
SharedArrayBuffer | تمثل مخزنًا ثابت الطول للبيانات الثنائية الخام |
String | تمثل سلسلة من الأحرف |
structuredClone | تنشئ نسخة عميقة من قيمة |
Symbol | تمثل نوع بيانات فريدًا وغير قابل للتغيير يستخدم كمفتاح لخاصية كائن |
SyntaxError | تمثل خطأً عند محاولة تفسير كود غير صحيح من الناحية التركيبية |
TypeError | تمثل خطأً عندما لا تكون القيمة من النوع المتوقع |
Uint8Array | تمثل مصفوفة منظمة من أعداد صحيحة غير موقعة 8-بت |
Uint8ClampedArray | تمثل مصفوفة منظمة من أعداد صحيحة غير موقعة 8-بت مقيدة بين 0-255 |
Uint32Array | تمثل مصفوفة منظمة من أعداد صحيحة غير موقعة 32-بت |
URIError | تمثل خطأً عند استخدام دالة معالجة URI العالمية بطريقة خاطئة |
URL | تمثل كائنًا يوفر طرقًا ثابتة تستخدم لإنشاء عناوين URL للكائنات |
URLPattern | تمثل نمط URL |
URLSearchParams | تمثل مجموعة من أزواج المفتاح/القيم |
WeakMap | تمثل مجموعة من أزواج المفتاح/القيم حيث تكون المفاتيح مرجعًا ضعيفًا |
WeakSet | تمثل مجموعة من الكائنات حيث يمكن أن يظهر كل كائن مرة واحدة فقط |
WebAssembly | توفر وصولاً إلى WebAssembly |
ملحقات (Polyfills) المحددة في Next.js
متغيرات البيئة (Environment Variables)
يمكنك استخدام process.env
للوصول إلى متغيرات البيئة سواء في next dev
أو next build
.
واجهات برمجة التطبيقات غير المدعومة
يحتوي وقت تشغيل الحافة (Edge Runtime) على بعض القيود بما في ذلك:
- واجهات برمجة تطبيقات Node.js الأصلية غير مدعومة. على سبيل المثال، لا يمكنك القراءة من أو الكتابة إلى نظام الملفات.
- يمكن استخدام
node_modules
طالما أنها تطبق وحدات ES ولا تستخدم واجهات برمجة تطبيقات Node.js الأصلية. - استدعاء
require
مباشرة غير مسموح به. استخدم وحدات ES بدلاً من ذلك.
ميزات لغة JavaScript التالية معطلة، ولن تعمل:
واجهة برمجة التطبيق | الوصف |
---|---|
eval | تقيّم كود JavaScript ممثلًا كسلسلة نصية |
new Function(evalString) | تنشئ دالة جديدة بالكود المقدم كوسيطة |
WebAssembly.compile | تُجمّع وحدة WebAssembly من مصدر مخزن مؤقت |
WebAssembly.instantiate | تُجمّع وتُنشئ وحدة WebAssembly من مصدر مخزن مؤقت |
في حالات نادرة، قد يحتوي الكود الخاص بك (أو يستورد) بعض عبارات تقييم الكود الديناميكي التي لا يمكن الوصول إليها أثناء التشغيل ولا يمكن إزالتها عن طريق تقليل الحجم (treeshaking). يمكنك تخفيف الفحص للسماح بملفات محددة من خلال تكوين Middleware الخاص بك:
export const config = {
unstable_allowDynamic: [
// يسمح بملف واحد
'/lib/utilities.js',
// استخدم نمطًا عامًا للسماح بأي شيء في وحدة function-bind من طرف ثالث
'**/node_modules/function-bind/**',
],
}
unstable_allowDynamic
هو نمط عام (glob)، أو مصفوفة من الأنماط العامة، تتجاهل تقييم الكود الديناميكي لملفات محددة. الأنماط العامة مرتبطة بمجلد جذر التطبيق الخاص بك.
احذر أنه إذا تم تنفيذ هذه العبارات على الحافة، فسوف تسبب خطأ أثناء التشغيل.