0.3 · أول سكربت و REPL في Node

المستوى 0 · البدء مع Node.js

0.3أول سكربت و REPL في Node

الهدف: تنفيذ JavaScript في Node بطريقتين (REPL وملفات .js)، واستخدام console.log واكتشاف الكائنات العامة الخاصة بـ Node.
الوقت المقدّر: 8 دقيقة · قراءة ذاتية · إذا كان لديك 5 دقائق فقط: اقرأ «الأساسي في 30 ثانية» + المخطط.

الأساسي في 30 ثانية

  • وضعان: REPL للتجربة، وملف .js للتطوير : node وحده تفاعليًا، وnode app.js للدائم.
  • console.log تعرض في الطرفية : الأداة الأساسية للرؤية والتتبّع والتصحيح لقيمك.
  • عامة Node، لا DOM : ‏process و__dirname وglobal — وأبدًا window أو document في Node.

حالة مستمرة — ساليم يُنفِّذ أول Hello له

ساليم، مطوّر مبتدئ في الجزائر، يفتح الطرفية: يكتب node وحده ويجرِّب 1 + 1 في REPL، ثم يخرج منه. ثم ينشئ app.js مع console.log ترحيبية، ويُنفِّذه مع node app.js، ويعرض الوسائط المستلمة والمجلد الحالي. وعندما يبحث عن window بغريزة الواجهات، يجيبه Node أنها غير موجودة: فيفهم أننا هنا نصل إلى النظام، لا إلى صفحة. فسلسلة الذهاب والإياب «حرِّر، شغِّل، اقرأ» تعمل.

حالة مستقلة لهذا القسم: تعود في الدرس والمخطط والنص الجاهز وتحدي 48 ساعة للقسم 0.3.

1. الـ REPL وملف السكربت

طريقتان لتنفيذ JavaScript. فـ REPL (حلقة قراءة-تقييم-طباعة): بكتابة node وحده، تفتح بيئة تفاعلية تُقيِّم كل سطر فورًا — مثالية للتجربة واختبار تعبير أو استكشاف دالة (ونخرج منها مع .exit). والطريقة الرئيسية: ملف السكربت. نكتب شيفرتنا في .js ونُشغِّلها مع node app.js — وهكذا نطوِّر تطبيقات حقيقية، محفوظة وقابلة للإصدارات. يحفظ ساليم: REPL للمسودة المهملة، والملف للبناء.

2. console.log وعامة Node

تعرض console.log() في الطرفية: مكافئ «print»، أداتك الأساسية لرؤية القيم والتصحيح. وتوفِّر Node كائنات عامة خاصة: process (الوسائط عبر process.argv، والبيئة عبر process.env، والخروج عبر process.exit())، و__dirname و__filename (المجلد والملف الحاليان)، وglobal. يعرضها ساليم واحدًا واحدًا في app.js خاصته في الجزائر ويقرأ كل قيمة في الطرفية.

3. Node ليست متصفحًا

الفرق الجوهري مع الواجهات: في Node، لا window ولا document ولا DOM — فلا صفحة ويب هنا. وفي المقابل، وصول إلى النظام (ملفات، شبكة، عمليات) عبر الوحدات (Modules) والعامة. فشيفرة تتلاعب بالـ DOM لا تعمل في Node، والعكس صحيح. ألصق ساليم هذا التذكير فوق شاشته: «هنا، لا صفحة — ملفات ووسائط وعمليات». إتقان هذين الوضعين وهذه العامة يعني الجاهزية لكتابة برامج حقيقية.

خطأ شائع في الفهم: «يكفي REPL للتطوير، وwindow موجودة في كل JS». خطأ. فـ REPL عابر: لا شيء محفوظ، والشيفرة الطويلة فيه شاقة — يصلح للاختبار السريع لا للبناء. وwindow وdocument والـ DOM غير موجودة في Node: فمحاولة التلاعب بصفحة تفشل دائمًا. والممارسة الجيدة: التطوير في ملفات .js (محفوظة وقابلة للقراءة والإصدارات) وحجز REPL للتجارب المهملة.
تنفيذ شيفرة Node مسودة مهملة أم عمل دائم: اختر الوضع الصحيح. REPL ‏node وحده،تفاعلي، مهململف .js ‏node app.js،للتطويرعامة Node ‏processو__dirname وglobal
مسودة مهملة أم عمل دائم: اختر الوضع الصحيح.
نص المخطط (SEO / قارئات الشاشة / الترجمة): 1) يفتح ساليم، المطوّر المبتدئ في الجزائر، REPL مع node وحده: يجرِّب تعبيرات ويخرج مع .exit. 2) ينشئ app.js مع console.log، ويُشغِّله مع node app.js، ثم يعرض process.argv و__dirname. 3) يلاحظ أن window وdocument غير موجودتين: فـ Node تصل إلى النظام، لا إلى صفحة. الدرس: REPL للتجربة السريعة، والملف للتطوير الدائم.

🔎 مثال ملموس — 🔎 مثال ملموس — أهلًا Node!

console.log("Hello, Node !");
console.log(process.argv);
console.log(__dirname);
// التشغيل: node app.js Salim

القراءة : يرى ساليم رسالته وقائمة الوسائط ثم المجلد الحالي.

الدرس : سلسلة حرِّر وشغِّل واقرأ تعمل من البداية إلى النهاية.

مفردات القسم

REPL
بيئة تفاعلية تُفتَح مع node وحده: تقرأ JavaScript وتُقيِّمها وتطبعها سطرًا بسطر؛ مثالية للتجربة.

مثال بسيط: يكتب ساليم 1 + 1 في REPL فيقرأ النتيجة فورًا.

ما ليس كذلك: ملف محفوظ وقابل للإصدارات.

رد فعل: افتح REPL لاختبار فكرة قبل كتابتها في ملف.

تنفيذ ملف
الطريقة الرئيسية للعمل: كتابة شيفرتك في .js وتشغيلها مع node fichier.js، فيُنفِّذ الملف كله.

مثال بسيط: يُشغِّل ساليم node app.js فيرى Hello تظهر.

ما ليس كذلك: كتابة برنامج كامل سطرًا بسطر في REPL.

رد فعل: فور تجاوز سطرين، انتقل إلى ملف.

console.log()
دالة العرض في الطرفية؛ الأداة الأساسية لرؤية القيم وتتبّع التنفيذ والتصحيح.

مثال بسيط: يعرض ساليم كل متغير مع console.log قبل البحث أبعد.

ما ليس كذلك: مردود مرئي في صفحة ويب.

رد فعل: اعرض أولًا، وافترِض بعدها.

process
الكائن العام لـ Node حول العملية الجارية: الوسائط (process.argv) والبيئة (process.env) والخروج (process.exit()).

مثال بسيط: يقرأ ساليم الاسم الممرَّر كوسيط عبر process.argv في الجزائر.

ما ليس كذلك: window أو document، غير الموجودتين في Node.

رد فعل: اقرأ argv لكل أداة سطر أوامر صغيرة.

عامة Node مقابل المتصفح
توفِّر Node كلًّا من process و__dirname و__filename وglobal مع وصول للنظام؛ ولا window ولا document ولا DOM فيها.

مثال بسيط: يستبدل ساليم document بـ __dirname عندما يبحث أين هو.

ما ليس كذلك: البيئة نفسها على الجانبين.

رد فعل: أمام window is not defined، بدِّل إلى منطق النظام.

في التطبيق — عمليًا — نفِّذ أول شيفرة Node لك

  1. افتح REPL مع node وحده؛ وجرِّب تعبيرات ثم اخرج مع .exit، مثل ساليم.
  2. أنشئ app.js مع console.log ترحيبية وشغِّله مع node app.js.
  3. اعرض process.argv و__dirname من الملف؛ وأعد التشغيل مع وسيط (node app.js Salim).
  4. لاحظ أن window وdocument غير موجودتين في Node؛ وفي المقابل نصل إلى النظام.
تُنفِّذ JavaScript في Node بطريقتين (REPL تفاعلي وملفات .js)، وتستخدم console.log وتكتشف الكائنات العامة الخاصة بـ Node.

نص جاهز — احكِ أول تنفيذ لك (30 ثانية)

«جرَّبت في REPL مع node وحده، ثم كتبت app.js مع console.log. ومع node app.js Salim، أرى رسالتي ووسائطي ومجلدي الحالي. وتحقَّقت: لا window هنا، نكلِّم النظام.»

يُقال مع عرض الطرفية: أولًا REPL، ثم تنفيذ الملف مع وسيط.

نموذج نسخ ولصق — أول app.js لي

const prenom = process.argv[2] || "Salim";
console.log("Hello, Node ! Bienvenue " + prenom + ".");
console.log("Dossier courant : " + __dirname);
console.log("Arguments recus : " + JSON.stringify(process.argv.slice(2)));

دون وسيط

شغِّل node app.js دون شيء: يعرض النموذج Salim افتراضيًا، ثم أعد التشغيل مع اسمك لرؤية process.argv يتغيّر.

مستكشف REPL

قبل الملف: جرِّب كل سطر من النموذج واحدًا واحدًا في REPL، ثم جمِّعها في app.js — فالمسودة تصير دائمة.

ثنائي في الجزائر

يُملي ساليم ويكتب زميله: أحدهما يقرأ الطرفية بصوت عالٍ (رسالة ومجلد ووسائط)، والآخر يتحقّق من كل قيمة معروضة.

منعكس التصحيح

برنامج صامت: أضف console.log بعد كل خطوة (دخل وحساب وخرج) وأعد التشغيل — فأقدم مصحِّح يبقى الأسرع.

✓ ممارسات جيدة

  • استخدم REPL لاختبار فكرة أو استكشاف دالة.
  • طوِّر في ملفات .js (محفوظة وقابلة للإصدارات).
  • اعرف process و__dirname وglobal منذ البداية.

✗ أخطاء شائعة

  • كتابة برنامج كامل في REPL العابر.
  • البحث عن window أو document في Node (غير موجودتين).
  • نسيان أن console.log هي أداة التصحيح الأساسية.

النقاط الأساسية

  • طريقتان للتنفيذ: REPL (‏node وحده، للتجربة) وملفات السكربت (node app.js، للتطوير).
  • console.log() = العرض الطرفي: الأداة الأساسية لرؤية القيم والتصحيح.
  • الكائنات العامة لـ Node: ‏process (‏argv وenv وexit) و__dirname و__filename وglobal — خاصة بـ Node.
  • الفرق الجوهري: لا window ولا document ولا DOM في Node؛ وفي المقابل، وصول إلى النظام.

تحدي 48 ساعة — طبِّق غدًا

أنشئ app.js مع نموذج ساليم، وشغِّله مع وسيط ثم دونه، وجرِّب سطرًا من الملف في REPL.

قائمة الخروج من القسم
  • أُشغِّل REPL وملف .js موضِّحًا متى أستخدم كلًّا.
  • يعرض app.js خاصتي الرسالة والوسائط والمجلد الحالي.
  • أذكر عامة Node وغياب window وdocument.
تقييم ذاتي 1-5: هل أختار REPL أو ملفًا حسب الاستخدام؟تقييم ذاتي 1-5: هل عرضت argv و__dirname دون مساعدة؟

أسئلة شائعة

ما الفرق بين REPL وتنفيذ ملف، ومتى يُستخدَم كلٌّ؟

يُقيِّم REPL (‏node وحده) سطرًا بسطر مع نتيجة فورية: مثالي للتجربة (اختبار دالة، استكشاف وحدة (Module)، التحقّق من فكرة). وهو عابر: لا شيء محفوظ، وغير مناسب للشيفرة الطويلة. أما تنفيذ الملف (‏node app.js) فيُنفِّذ .js محفوظًا كله، قابلًا للتحرير في VS Code والإصدارات: وهو وضع العمل الحقيقي (خادم، سكربت، أداة). عمليًا: نطوِّر في ملفات ونفتح REPL كمسودة عارضة قبل الدمج.

ما الذي يتغيّر فعلًا بين JavaScript المتصفح وJavaScript في Node؟

فـ اللغة متطابقة (التركيب والأنواع والدوال والأصناف والوعود وasync/await — نفس محرك V8). وما يتغيّر هو البيئة: لا DOM في Node (لا document ولا window ولا عناصر HTML)، بل وصول إلى النظام محظور على المتصفح (ملفات وشبكة وعمليات عبر process، والنظام عبر الوحدات (Modules)). والعامة مختلفة (‏process و__dirname وglobal مقابل window وdocument) ولـ Node منظومتها npm. فالقدوم من الواجهات ميزة: نعرف اللغة أصلًا، ويبقى تعلّم بيئة Node.

تحقّق من فهمك

متى تستخدم REPL بدل ملف .js؟

موارد إضافية (اختياري، للتعمّق أكثر)

اختبار المستوى 0أسئلة جديدة وأصعب للتحقق من مكتسباتك