יסודות

התקנה ובדיקה

התקנת Node.js

הורידו מ- https://nodejs.org/ (מומלץ: גרסת LTS)

בדיקת התקנה

node --version   # v22.0.0 או יותר
npm --version    # 11.0.0 או יותר

שתי דרכים להריץ קוד

1. REPL (Read-Eval-Print-Loop)

שורת פקודה אינטראקטיבית - מעולה לניסויים מהירים:

$ node
Welcome to Node.js v22.0.0.
> 2 + 2
4
> console.log('שלום עולם!')
שלום עולם!
> .exit

פקודות שימושיות ב-REPL: - .help - עזרה - .clear - ניקוי - .exit - יציאה - Ctrl + C (פעמיים) - יציאה

2. הרצת קבצים

צרו קובץ app.js:

console.log('שלום מ-Node.js!');

הריצו:

node app.js

הבדלים מ-JavaScript בדפדפן

אין window, יש global

בדפדפן:

window.alert('שלום');  // עובד
document.getElementById('app');  // עובד

ב-Node.js:

window.alert('שלום');  // ❌ שגיאה! אין window
document.getElementById('app');  // ❌ שגיאה! אין DOM

global.myVar = 'ערך';  // ✅ האובייקט הגלובלי ב-Node
console.log(globalThis);  // ✅ עובד בשניהם

מה יש ב-Node.js שאין בדפדפן?

Node.js דפדפן
fs (קבצים) document (DOM)
http (שרת) window
path (נתיבים) localStorage
process (תהליך) fetch (רשת)
os (מערכת הפעלה) alert, prompt

אובייקט process

process הוא אובייקט גלובלי שמכיל מידע על התהליך הנוכחי.

מידע על הסביבה

// var Node.js
console.log(process.version);  // v22.0.0

// מערכת הפעלה
console.log(process.platform);  // win32, linux, darwin

// תיקייה נוכחית
console.log(process.cwd());  // C:\projects\my-app

ארגומנטים משורת הפקודה

// node app.js שלום עולם
console.log(process.argv);
// ['C:\\...\\node.exe', 'C:\\...\\app.js', 'שלום', 'עולם']

// רק הארגומנטים שלנו
const args = process.argv.slice(2);
console.log(args);  // ['שלום', 'עולם']

משתני סביבה

// read קריאת משתנה סביבה
console.log(process.env.PATH);
console.log(process.env.NODE_ENV);  // development / production

// שימוש נפוץ
const port = process.env.PORT || 3000;

יציאה מהתוכנית

process.exit(0);  // יציאה תקינה
process.exit(1);  // יציאה עם שגיאה

משתנים מיוחדים

__dirname - הנתיב לתיקייה של הקובץ הנוכחי

console.log(__dirname);
// C:\projects\my-app\src

__filename - הנתיב המלא לקובץ הנוכחי

console.log(__filename);
// C:\projects\my-app\src\app.js

שימוש מעשי

const path = require('path');

// בניית נתיב לקובץ בתיקייה שלנו
const configPath = path.join(__dirname, 'config.json');
console.log(configPath);
// C:\projects\my-app\src\config.json

Event Loop - הלב של Node.js

Event Loop הוא מה שמאפשר ל-Node.js לטפל בהרבה פעולות במקביל למרות שהוא single-threaded.

הרעיון הבסיסי

     ┌───────────────────────────┐
  ┌─>│         Call Stack        │  (מבצע קוד סינכרוני)
  │  └───────────┬───────────────┘
  │              │
  │              ▼
  │  ┌───────────────────────────┐
  │  │        Node APIs          │  (טיימרים, I/O, וכו')
  │  └───────────┬───────────────┘
  │              │
  │              ▼
  │  ┌───────────────────────────┐
  │  │      Callback Queue       │  (פונקציות שמחכות)
  │  └───────────┬───────────────┘
  │              │
  └──────────────┘ Event Loop בודק אם ה-Call Stack ריק

דוגמה פשוטה

console.log('1 - התחלה');

setTimeout(() => {
    console.log('2 - מהטיימר');
}, 0);

console.log('3 - סוף');

// פלט:
// 1 - התחלה
// 3 - סוף
// 2 - מהטיימר

למה? למרות ש-setTimeout מוגדר ל-0 מילישניות, הוא נשלח ל-Callback Queue ומתבצע רק אחרי שכל הקוד הסינכרוני סיים.


console - יותר מ-log

// הדפסה רגילה
console.log('מידע רגיל');

// אזהרה (צהוב בטרמינלים תואמים)
console.warn('זו אזהרה!');

// שגיאה (אדום)
console.error('זו שגיאה!');

// טבלה (מעולה לאובייקטים ומערכים)
console.table([
    { שם: 'משה', גיל: 30 },
    { שם: 'שרה', גיל: 25 }
]);

// מדידת זמן
console.time('לולאה');
for (let i = 0; i < 1000000; i++) {}
console.timeEnd('לולאה');  // לולאה: 5.123ms

// קיבוץ הודעות
console.group('פרטי משתמש');
console.log('שם: ישראל');
console.log('גיל: 28');
console.groupEnd();

Buffer - עבודה עם נתונים בינאריים

Buffer מייצג נתונים בינאריים (bytes) - חשוב לעבודה עם קבצים ורשת.

// יצירת Buffer מטקסט
const buf = Buffer.from('שלום עולם', 'utf8');
console.log(buf);  // <Buffer d7 a9 d7 9c d7 95 d7 9d ...>

// המרה חזרה לטקסט
console.log(buf.toString());  // שלום עולם

// יצירת Buffer ריק
const emptyBuf = Buffer.alloc(10);  // 10 bytes של אפסים

// גודל Buffer
console.log(buf.length);  // מספר ה-bytes

סיכום

מושג תיאור
node פקודה להרצת קוד
REPL סביבה אינטראקטיבית
global האובייקט הגלובלי
process מידע על התהליך
__dirname נתיב לתיקייה
__filename נתיב לקובץ
Event Loop מנגנון הטיפול באירועים
Buffer נתונים בינאריים

← חזרה לרקע | → המשך לתחביר

בדקו את עצמכם

נסו לענות לבד לפני שאתם פותחים את התשובה.

  1. מה אין ב-Node.js שיש בדפדפן?

    1. setTimeout
    2. console
    3. document ו-window
    4. Math
    הצגת התשובה

    תשובה ג. אין דף ואין DOM. במקום זה יש process, fs ומודולי מערכת.

  2. מה תפקיד ה-Event Loop?

    1. לצייר את המסך
    2. לנהל זיכרון
    3. להריץ לולאות for
    4. לאפשר לתהליך אחד לטפל בהרבה פעולות אסינכרוניות בלי לחכות לכל אחת
    הצגת התשובה

    תשובה ד. בזמן שקריאה מהדיסק או מהרשת ממתינה, הקוד ממשיך לטפל בדברים אחרים.