0.3أول سكربت و REPL في Node
الأساسي في 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، والعكس صحيح. ألصق ساليم هذا التذكير فوق شاشته: «هنا، لا صفحة — ملفات ووسائط وعمليات». إتقان هذين الوضعين وهذه العامة يعني الجاهزية لكتابة برامج حقيقية.
🔎 مثال ملموس — 🔎 مثال ملموس — أهلًا 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 لك
- افتح REPL مع node وحده؛ وجرِّب تعبيرات ثم اخرج مع .exit، مثل ساليم.
- أنشئ app.js مع console.log ترحيبية وشغِّله مع node app.js.
- اعرض process.argv و__dirname من الملف؛ وأعد التشغيل مع وسيط (node app.js Salim).
- لاحظ أن window وdocument غير موجودتين في 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.
أسئلة شائعة
ما الفرق بين 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؟