الفرق بين المراجعتين ل"Node.js/repl"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
ط (تنسيق)
ط (كود القسم الأول من الصفحة)
سطر 20: سطر 20:
 
* ‎.load: يحمّل ملفًا إلى جلسة REPL الحالية. ‎> ‎.‎load ./file/to/load.js‎
 
* ‎.load: يحمّل ملفًا إلى جلسة REPL الحالية. ‎> ‎.‎load ./file/to/load.js‎
 
* ‎.editor: يدخل وضع التعديل (للانتهاء ‎<ctrl>‎-‎D‎، \وللإلغاء ‎<ctrl>‎-‎C)
 
* ‎.editor: يدخل وضع التعديل (للانتهاء ‎<ctrl>‎-‎D‎، \وللإلغاء ‎<ctrl>‎-‎C)
 +
<syntaxhighlight lang="javascript">
 +
> .editor
 +
 +
 +
دخول وضع التعديل (للانتهاء D^ وللإلغاء C^ )//
 +
 +
function welcome(name) {
 +
  return `Hello ${name}!`;
 +
}
 +
 +
welcome('Node.js User');
 +
 +
// ^D
 +
'Hello Node.js User!'
 +
>
 +
 +
</syntaxhighlight>
 +
 
يملك المزيج التالي من المفاتيح في REPL هذه التأثيرات الخاصة:
 
يملك المزيج التالي من المفاتيح في REPL هذه التأثيرات الخاصة:
 
* ‎<ctrl>‎‎-‎‎C‎: عندما تُضغط مرّة، فإنها تملك ذات التأثير كأمر ‎.break .عندما تُضغط مرّتين على سطر فارغ، تملك ذات تأثير أمر ‎.exit
 
* ‎<ctrl>‎‎-‎‎C‎: عندما تُضغط مرّة، فإنها تملك ذات التأثير كأمر ‎.break .عندما تُضغط مرّتين على سطر فارغ، تملك ذات تأثير أمر ‎.exit
سطر 29: سطر 47:
  
 
== تعابير JavaScript ==
 
== تعابير JavaScript ==
يدعم المقيّم الافتراضي تقييم مباشر لتعابير JavaScript:
+
يدعم المقيّم الافتراضي تقييم مباشر لتعابير JavaScript:<syntaxhighlight lang="javascript">
 +
> 1 + 1
 +
2
 +
> const m = 2
 +
undefined
 +
> m + 1
 +
3
 +
 
 +
</syntaxhighlight>
  
 
إلّا إذا وسِّع من خلال كتل برمجية أو دوال، يُصرّح عن المتحولات المصرّح عنها في النطاق العام إما بشكل ضمني أو باستخدام الكلمات المفتاحية const أو let أو var.
 
إلّا إذا وسِّع من خلال كتل برمجية أو دوال، يُصرّح عن المتحولات المصرّح عنها في النطاق العام إما بشكل ضمني أو باستخدام الكلمات المفتاحية const أو let أو var.
  
 
== النطاق العام والمحلي ==
 
== النطاق العام والمحلي ==
يوفّر المقيّم الافتراضي وصولًا إلى أي متحول موجود في النطاق العام. من الممكن استخراج متحول إلى REPL بشكل صريح بإسناده إلى كائن context مترافق مع كل REPLServer:
+
يوفّر المقيّم الافتراضي وصولًا إلى أي متحول موجود في النطاق العام. من الممكن استخراج متحول إلى REPL بشكل صريح بإسناده إلى كائن context مترافق مع كل REPLServer:<syntaxhighlight lang="javascript">
 +
const repl = require('repl');
 +
const msg = 'message';
 +
 
 +
repl.start('> ').context.m = msg;
 +
 
 +
</syntaxhighlight>تظهر الخاصيات في كائن context كمحلية ضمن REPL:<syntaxhighlight lang="javascript">
 +
$ node repl_test.js
 +
> m
 +
'message'
 +
</syntaxhighlight>
 +
 
 +
خاصيات السياق Context افتراضيًا ليست للقراءة-فقط، لتحديد قراءة-فقط على النطاق العام، يجب أن تُعرّف خاصيات السياق باستخدام Object.defineProperty()‎:<syntaxhighlight lang="javascript">
 +
const repl = require('repl');
 +
const msg = 'message';
 +
 
 +
const r = repl.start('> ');
 +
Object.defineProperty(r.context, 'm', {
 +
  configurable: false,
 +
  enumerable: true,
 +
  value: msg
 +
});
 +
 
  
تظهر الخاصيات في كائن context كمحلية ضمن REPL:
 
  
خاصيات السياق Context افتراضيًا ليست للقراءة-فقط، لتحديد قراءة-فقط على النطاق العام، يجب أن تُعرّف خاصيات السياق باستخدام Object.defineProperty()‎:
+
</syntaxhighlight>
  
 
=== الوصول إلى نواة وحدات Node.js ===
 
=== الوصول إلى نواة وحدات Node.js ===
سوف يحمّل المقيّم الافتراضي تلقائيًا الوحدات الأساسية في Node.js إلى بيئة REPL عندما تُستخدم. على سبيل المثال، إلّا إذا صرّح عنها كمتحولات عامة أو متحولات نطاق. سوف يُقيّم الدخل fs عند الطلب كما يلي ‎global.fs = require('fs')‎:
+
سوف يحمّل المقيّم الافتراضي تلقائيًا الوحدات الأساسية في Node.js إلى بيئة REPL عندما تُستخدم. على سبيل المثال، إلّا إذا صرّح عنها كمتحولات عامة أو متحولات نطاق. سوف يُقيّم الدخل fs عند الطلب كما يلي ‎global.fs = require('fs')‎:<syntaxhighlight lang="javascript">
 +
> fs.createReadStream('./some/file');
 +
</syntaxhighlight>

مراجعة 14:01، 19 نوفمبر 2018

الاستقرار: 2-مستقر

تقدّم الوحدة repl تطبيق قراءة وتقييم وطباعة حلقة تكرار والذي يكون متوافرًا كبرنامج بحد ذاته (مستقل) أو مُتَضمّن في تطبيق آخر. يمكن الوصول إليه باستخدام:

const repl = require('repl');

التصميم والميزات

تُصدِّر الوحدة repl الصنف repl.REPLServer أثناء التنفيذ، سوف تقبل نسخ repl.REPLServer أسطرًا مفردةً من دخل المستخدم وتقيّمها تبعًا لدوال تقييم معرّفة من المستخدم ومن ثمّ تخرج الناتج. ربما يكون الدخل والخرج من stdin و stdout، على التوالي، ربما تكون متصلة بأي مجرى (stream) يتبع لبرمجية Node.js.

تدعم نُسخ repl.REPLServer الإكمال التلقائي للدخل، وتعديل سطري بنمط برمجية Emacs‏ (Emacs-style) البسيط، ودخل متعدد الأسطر، و خرج بأسلوب ANSI-styled، وحفظ واستعادة حالة جلسة REPL الحالية، وإصلاح الأخطاء، ودوال تقييم قابلة للتخصيص.

أوامر ومفاتيح خاصة

الأوامر الخاصة التالية مدعومة من قبل كل نُسخ  REPL:

  • ‎.break: في عملية إدخال تعبير متعدد الأسطر، سوف يوقف إدخال الأمر ‎.break (أو الضغط على مجموعة المفاتيح ‎<ctrl>‎-‎C‎) الدخل الإضافي أو معالجة ذاك التعبير.
  • ‎.clear: يعيد ضبط قيمة REPL context إلى كائن فارغ ويمسح أي تعابير متعددة الأسطر تُدخل حاليًا.
  • ‎.exit: يغلق مجرى الدخل/الخرج (I/O)، متسبّبًا بخروج REPL.
  • ‎.help: يظهر هذه القائمة من الأوامر الخاصة.
  • ‎.save: يحفظ جلسة REPL الحالية إلى ملف: ‎>‎ ‎.save ./file/to/save.js‎
  • ‎.load: يحمّل ملفًا إلى جلسة REPL الحالية. ‎> ‎.‎load ./file/to/load.js‎
  • ‎.editor: يدخل وضع التعديل (للانتهاء ‎<ctrl>‎-‎D‎، \وللإلغاء ‎<ctrl>‎-‎C)
> .editor


دخول وضع التعديل (للانتهاء D^ وللإلغاء C^ )//

function welcome(name) {
  return `Hello ${name}!`;
}

welcome('Node.js User');

// ^D
'Hello Node.js User!'
>

يملك المزيج التالي من المفاتيح في REPL هذه التأثيرات الخاصة:

  • ‎<ctrl>‎‎-‎‎C‎: عندما تُضغط مرّة، فإنها تملك ذات التأثير كأمر ‎.break .عندما تُضغط مرّتين على سطر فارغ، تملك ذات تأثير أمر ‎.exit
  • ‎<ctrl>‎-‎D: تملك ذات تأثير أمر ‎.exit
  • ‎<tab>‎: عندما تُضغط على سطر فارغ، تعرض المتحولات العامة والمحلية (النطاق). عندما تُضغط أثناء ادخال دخل آخر، تعرض خيارات إكمال تلقائي ذات صلة.

التقييم الإفتراضي

بشكل افتراضي، تستخدم كل نسخ repl.REPLServer دالة تقييم والتي تقيّم تعابير JavaScript وتوفّر وصول إلى وحدات Node.js مُدمجة. يمكن أن يُعاد تعريف هذا السلوك الافتراضي بتمرير دالة تقييم بديلة عندما تُنشأ نسخة repl.REPLServer.

تعابير JavaScript

يدعم المقيّم الافتراضي تقييم مباشر لتعابير JavaScript:

> 1 + 1
2
> const m = 2
undefined
> m + 1
3

إلّا إذا وسِّع من خلال كتل برمجية أو دوال، يُصرّح عن المتحولات المصرّح عنها في النطاق العام إما بشكل ضمني أو باستخدام الكلمات المفتاحية const أو let أو var.

النطاق العام والمحلي

يوفّر المقيّم الافتراضي وصولًا إلى أي متحول موجود في النطاق العام. من الممكن استخراج متحول إلى REPL بشكل صريح بإسناده إلى كائن context مترافق مع كل REPLServer:

const repl = require('repl');
const msg = 'message';

repl.start('> ').context.m = msg;

تظهر الخاصيات في كائن context كمحلية ضمن REPL:

$ node repl_test.js
> m
'message'

خاصيات السياق Context افتراضيًا ليست للقراءة-فقط، لتحديد قراءة-فقط على النطاق العام، يجب أن تُعرّف خاصيات السياق باستخدام Object.defineProperty()‎:

const repl = require('repl');
const msg = 'message';

const r = repl.start('> ');
Object.defineProperty(r.context, 'm', {
  configurable: false,
  enumerable: true,
  value: msg
});

الوصول إلى نواة وحدات Node.js

سوف يحمّل المقيّم الافتراضي تلقائيًا الوحدات الأساسية في Node.js إلى بيئة REPL عندما تُستخدم. على سبيل المثال، إلّا إذا صرّح عنها كمتحولات عامة أو متحولات نطاق. سوف يُقيّم الدخل fs عند الطلب كما يلي ‎global.fs = require('fs')‎:

> fs.createReadStream('./some/file');