4.2 node.js הרצאה
מבוא ל-Node.js ו-npm¶
בהרצאה זו נלמד מה זה Node.js, למה משתמשים בו, איך הוא עובד מאחורי הקלעים, ומהו npm - מנהל החבילות המרכזי של עולם ה-JavaScript. בסוף ההרצאה תדעו ליצור פרויקט, להתקין חבילות, להריץ קוד, ולהבין את ה-ecosystem.
מה זה Node.js¶
פלטפורמת Node.js היא סביבת ריצה ל-JavaScript מחוץ לדפדפן. כלומר, במקום להריץ JavaScript רק בדפדפן (Frontend), אפשר להריץ אותו גם בצד השרת (Backend), בסקריפטים, בכלים אוטומטיים, CLI ועוד.
פלטפורמת Node.js מבוססת על מנוע V8 (המנוע של Chrome)
היתרון המרכזי: JavaScript בכל מקום- גם שרת וגם לקוח.
למה להשתמש ב-Node.js¶
-
מאפשר כתיבת שרתים מהירים ולא חוסמים (Non-blocking)
-
מצוין ל-API, מערכות realtime, WebSockets, סטרימינג
-
אקוסיסטם ענק של חבילות (npm)
-
קוד JavaScript אחיד לכל הסטאק
-
ביצועים גבוהים עבור I/O
מודל העבודה של Node.js – Event Loop¶
פלטפורמת Node.js עובדת במודל חד-תהליכי (Single Thread) אך לא חוסם.
במקום לחכות לפעולות איטיות (קבצים, רשת, DB), Node משתמש ב-Event Loop:
-
שולחים פעולה אסינכרונית (למשל קריאת קובץ)
-
הNode ממשיך לרוץ
-
כשהפעולה מסתיימת – Callback/Promise נכנס לתור
-
ה-Event Loop מבצע אותו
זה מאפשר לשרת אחד לטפל באלפי חיבורים במקביל.
התקנת Node.js¶
מורידים מהאתר הרשמי ומתקינים. לאחר ההתקנה בדקו בטרמינל שיש לכם את הפקודות:
הרצת קובץ JavaScript¶
יוצרים קובץ java script
app.js
כותבים:
מריצים:
מודולים ב-Node.js¶
הNode משתמש במודולים כדי לחלק קוד.
CommonJS (ברירת מחדל)¶
עבודה עם קבצים (File System)¶
const fs = require("fs");
fs.writeFileSync("test.txt", "Hello");
const data = fs.readFileSync("test.txt", "utf8");
console.log(data);
גרסה אסינכרונית:
יצירת שרת HTTP בסיסי¶
const http = require("http");
const server = http.createServer((req, res) => {
res.write("Hello from Node");
res.end();
});
server.listen(3000);
מה זה npm¶
הכלי npm = Node Package Manager
זהו מנהל החבילות של Node.js. מאפשר:
-
התקנת ספריות
-
ניהול תלויות
-
הרצת סקריפטים
-
פרסום חבילות
חשבו על זה כהpip של node.
יצירת פרויקט Node¶
או:
יווצר הקובץ הבא בתקייה של הפרויקט:
package.json
זהו קובץ הניהול של הפרויקט.
מבנה package.json¶
{
"name": "my-app",
"version": "1.0.0",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"dependencies": {}
}
התקנת חבילה¶
זה:
-
מתקין את החבילה
-
מוסיף ל-dependencies
-
יוצר תקייה node_modules שמכילה את כל הקבצים של הספרייה
התקנה כ-dev dependency¶
מחיקת חבילה¶
node_modules¶
התיקיה שמכילה את כל החבילות. לא מעלים ל-Git.
מוסיפים ל-.gitignore:
package-lock.json¶
קובץ שנוצר אוטומטית שמקבע גרסאות מדויקות של חבילות.
סקריפטים ב-npm¶
ב-package.json:
ניתן להגדיר ״סקריפטים״
כאן גדרנו שהסקריפט ״start" יריץ את הפקודה node app.js
כדי להריץ את הסקריפט כתבו את הפקודה:
התקנה גלובלית של חבילה¶
שרת Express- שרת http פופולרי בnode¶
const express = require("express");
const app = express();
app.get("/", (req, res) => {
res.send("Hello Express");
});
app.listen(3000); // הפורט
עבודה עם JSON¶
app.use(express.json());
app.post("/data", (req, res) => {
console.log(req.body);
res.send("ok");
});
async/await¶
הפלטפורמה מוסיפה לjs יכולות של async + await כמו שאנחנו מכירים בפייתון
const fs = require("fs/promises");
async function run() {
const data = await fs.readFile("test.txt", "utf8");
console.log(data);
}
run();
require מול import¶
אם ב-package.json:
אפשר:
npx¶
מריץ חבילות בלי להתקין:
גרסאות חבילות¶
^ = מאפשר עדכון מינורי
~ = מאפשר רק patch