יסודות
התקנה ובדיקה
התקנת 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 | נתונים בינאריים |
בדקו את עצמכם
נסו לענות לבד לפני שאתם פותחים את התשובה.
-
מה אין ב-Node.js שיש בדפדפן?
הצגת התשובה
תשובה ג. אין דף ואין DOM. במקום זה יש process, fs ומודולי מערכת.
-
מה תפקיד ה-Event Loop?
הצגת התשובה
תשובה ד. בזמן שקריאה מהדיסק או מהרשת ממתינה, הקוד ממשיך לטפל בדברים אחרים.