وقت تشغيل الحافة (Edge Runtime)
وقت تشغيل Edge في 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 | يمثل قارئًا لـ ReadableStream |
ReadableStreamDefaultReader | يمثل قارئًا افتراضيًا لـ ReadableStream |
TransformStream | يمثل تدفق تحويل |
WritableStream | يمثل تدفقًا قابلًا للكتابة |
WritableStreamDefaultWriter | يمثل كاتبًا افتراضيًا لـ WritableStream |
واجهات برمجة التشفير الآمن
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 |
حشوات خاصة بـ Next.js
متغيرات البيئة
يمكنك استخدام 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 = {
runtime: 'edge', // لمسارات واجهة برمجة التطبيقات للحافة فقط
unstable_allowDynamic: [
// يسمح بملف واحد
'/lib/utilities.js',
// استخدم النمط العام للسماح بأي شيء في وحدة function-bind من طرف ثالث
'**/node_modules/function-bind/**',
],
}
unstable_allowDynamic
هو نمط عام، أو مصفوفة من الأنماط العامة، تتجاهل تقييم الكود الديناميكي لملفات محددة. الأنماط العامة مرتبطة بمجلد جذر التطبيق الخاص بك.
تحذير: إذا تم تنفيذ هذه العبارات على الحافة، فسوف تسبب خطأ أثناء التشغيل.