وقت تشغيل الحافة (Edge Runtime)
وقت تشغيل الحافة (Edge Runtime) في Next.js يعتمد على واجهات برمجة تطبيقات الويب القياسية، وهو يدعم الواجهات البرمجية التالية:
واجهات برمجة تطبيقات الشبكة
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 | يمثل قارئًا لتدفق قابل للقراءة |
ReadableStreamDefaultReader | يمثل قارئًا افتراضيًا للتدفق |
TransformStream | يمثل تدفق تحويل |
WritableStream | يمثل تدفقًا قابلًا للكتابة |
WritableStreamDefaultWriter | يمثل كاتبًا افتراضيًا للتدفق |
واجهات برمجة تطبيقات التشفير الآمن
API | الوصف |
---|---|
crypto | يوفر وصولاً إلى الوظائف التشفيرية للنظام |
CryptoKey | يمثل مفتاحًا تشفيريًا |
SubtleCrypto | يوفر وصولاً إلى البدائيات التشفيرية الشائعة مثل التجزئة، التوقيع، التشفير أو فك التشفير |
واجهات برمجة تطبيقات الويب القياسية
الواجهة البرمجية | الوصف |
---|---|
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 | توفر وصولاً إلى وظائف التدويل والتوطين |
isFinite | تحدد ما إذا كانت القيمة رقمًا محدودًا |
isNaN | تحدد ما إذا كانت القيمة NaN أم لا |
JSON | توفر وظائف لتحويل قيم JavaScript من وإلى تنسيق JSON |
Map | تمثل مجموعة من القيم، حيث يمكن أن يظهر كل قيمة مرة واحدة فقط |
Math | توفر وصولاً إلى الدوال والثوابت الرياضية |
Number | تمثل قيمة رقمية |
Object | تمثل الكائن الذي هو أساس جميع كائنات JavaScript |
parseFloat | تحلل وسيط سلسلة وتعيد رقم فاصلة عائمة |
parseInt | تحلل وسيط سلسلة وتعيد عددًا صحيحًا للأساس المحدد |
Promise | تمثل الانتهاء النهائي (أو الفشل) لعملية غير متزامنة، وقيمتها الناتجة |
Proxy | تمثل كائنًا يُستخدم لتعريف سلوك مخصص للعمليات الأساسية (مثل البحث عن الخاصية، التعيين، التعداد، استدعاء الدالة، إلخ) |
queueMicrotask | تضيف مهمة صغيرة إلى قائمة الانتظار لتنفيذها |
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).
يمكنك تخفيف الفحص للسماح بملفات محددة مع تكوين التصدير لمسار واجهة برمجة التطبيقات (API Route) أو البرنامج الوسيط (Middleware):
export const config = {
runtime: 'edge', // لمسارات واجهة برمجة التطبيقات للحافة فقط
unstable_allowDynamic: [
// يسمح بملف واحد
'/lib/utilities.js',
// استخدم النمط العام (glob) للسماح بأي شيء في وحدة function-bind من طرف ثالث
'/node_modules/function-bind/**',
],
}
unstable_allowDynamic
هو نمط عام، أو مصفوفة من الأنماط العامة، تتجاهل تقييم الكود الديناميكي لملفات محددة. الأنماط العامة مرتبطة بمجلد جذر التطبيق الخاص بك.
تحذير: إذا تم تنفيذ هذه العبارات على الحافة، فسوف تظهر وتتسبب في خطأ أثناء التشغيل.