المُشغل المتقدم Edge Runtime في Next.js
يعتمد المُشغل الآني المتقدم Edge Runtime في Next.js على واجهات الويب البرمجية Web API التي تُستخدم من قبل البرمجيات الوسيطة أو وجهات API المتقدمة.
الواجهة البرمجية للشبكة
الواجهة البرمجية للتشفير
الواجهة البرمجية لنقل البيانات عبر ويب
ReadableStream
ReadableStreamBYOBReader
ReadableStreamDefaultReader
TransformStream
WritableStream
WritableStreamDefaultWriter
واجهة ويب البرمجية Crypto
واجهة ويب البرمجية المعيارية
أساسيات المحرّك V8
Array
ArrayBuffer
Atomics
BigInt
BigInt64Array
BigUint64Array
Boolean
clearInterval
clearTimeout
console
DataView
Date
decodeURI
decodeURIComponent
encodeURI
encodeURIComponent
Error
EvalError
Float32Array
Float64Array
Function
Infinity
Int8Array
Int16Array
Int32Array
Intl
isFinite
isNaN
JSON
Map
Math
Number
Object
parseFloat
parseInt
Promise
Proxy
RangeError
ReferenceError
Reflect
RegExp
Set
setInterval
setTimeout
SharedArrayBuffer
String
Symbol
SyntaxError
TextDecoder
TextEncoder
TypeError
Uint8Array
Uint8ClampedArray
Uint16Array
Uint32Array
URIError
URL
URLSearchParams
WeakMap
WeakSet
WebAssembly
متغيرات البيئة
بإمكانك استخدام الملف process.env
للوصول إلى متغيرات البيئة عبر next dev
و next build
. إنّ تنفيذ التعليمة console.log
على process.env
لن يعرض جميع متغيرات البيئة، وعليك ان تصل إلى المتغيرات مباشرة كالتالي:
console.log(process.env)
// { NEXT_RUNTIME: 'edge' }
console.log(process.env.TEST_VARIABLE)
// { NEXT_RUNTIME: 'edge', TEST_VARIABLE: 'value' }
الواجهات البرمجية غير المدعومة
- لا تُدعم الواجهة البرمجية الأصلية لبيئة Node.js، فلن تتمكن من القراءة أو الكتابة إلى نظام الملفات.
- يمكن استخدام
node_modules
طالما أنها تُنجز باستخدام وحدات ES ولا تستخدم واجهة Node.js البرمجية الأصلية. - لا يُسمح باستدعاء
require
مباشرة، لا بد من استخدام وحدات ES بدلًا منه. - عُطلت ميزات لغة JavaScript التالية:
eval
: تقييم شيفرة JavaScript المُمثَّلة كنص.new Function(evalString)
: إنشاء دالة جديدة من خلال شيفرة قُدمّت كوسيط argument.WebAssembly.compile
WebAssembly.instantiate
مع معامل مخزن مؤقت buffer.
قد تحوي شيفرتك في حالات نادرة تعليمات تقييم ديناميكية لا يمكن الوصول إليها وقت التنفيذ ولا يمكن حذفها أثناء عملية treeshaking ويمكنك تسهيل التحقق بالسماح بملفات محددة مع الضبط المُصدَّر مع البرمجيات الوسيطة Middleware أو وجهة الواجهة البرمجية المتقدمة Edge API Route:
export const config = {
runtime: 'edge', // for Edge API Routes only
unstable_allowDynamic: [
'/lib/utilities.js', // allows a single file
'/node_modules/function-bind/**', // use a glob to allow anything in the function-bind 3rd party module
],
}
unstable_allowDynamic
هو من نوع glop أو مصفوفة من أنواع glop يؤدي إلى تجاهل تقييم الشيفرة الديناميكية لملفات محددة ويكون نسبةً إلى المجلد الجذر لتطبيقك.
انتبه، إذ إن نُفِّذت هذه التعليمات في المُشغل المتقدم Edge فتتسبب بخطأ وقت التنفيذ.
المصادر
- الصفحة Edge Runtime من توثيق Next.js الرسمي.