לדלג לתוכן

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:

  1. שולחים פעולה אסינכרונית (למשל קריאת קובץ)

  2. הNode ממשיך לרוץ

  3. כשהפעולה מסתיימת – Callback/Promise נכנס לתור

  4. ה-Event Loop מבצע אותו

זה מאפשר לשרת אחד לטפל באלפי חיבורים במקביל.


התקנת Node.js

מורידים מהאתר הרשמי ומתקינים. לאחר ההתקנה בדקו בטרמינל שיש לכם את הפקודות:

node -v
npm -v

הרצת קובץ JavaScript

יוצרים קובץ java script
app.js
כותבים:

console.log("Hello Node");

מריצים:

node app.js

מודולים ב-Node.js

הNode משתמש במודולים כדי לחלק קוד.

CommonJS (ברירת מחדל)

// math.js
function add(a, b) {
  return a + b;
}

module.exports = add;
// app.js
const add = require("./math");
console.log(add(2, 3));

עבודה עם קבצים (File System)

const fs = require("fs");

fs.writeFileSync("test.txt", "Hello");

const data = fs.readFileSync("test.txt", "utf8");
console.log(data);

גרסה אסינכרונית:

fs.readFile("test.txt", "utf8", (err, data) => {
  if (err) throw err;
  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

npm init

או:

npm init -y

יווצר הקובץ הבא בתקייה של הפרויקט:

package.json

זהו קובץ הניהול של הפרויקט.


מבנה package.json

{
  "name": "my-app",
  "version": "1.0.0",
  "main": "app.js",
  "scripts": {
    "start": "node app.js"
  },
  "dependencies": {}
}

התקנת חבילה

npm install express

זה:

  • מתקין את החבילה

  • מוסיף ל-dependencies

  • יוצר תקייה node_modules שמכילה את כל הקבצים של הספרייה


התקנה כ-dev dependency

npm install nodemon --save-dev

מחיקת חבילה

npm uninstall express

node_modules

התיקיה שמכילה את כל החבילות. לא מעלים ל-Git.

מוסיפים ל-.gitignore:

node_modules

package-lock.json

קובץ שנוצר אוטומטית שמקבע גרסאות מדויקות של חבילות.


סקריפטים ב-npm

ב-package.json:
ניתן להגדיר ״סקריפטים״

"scripts": {
  "start": "node app.js",
  "dev": "nodemon app.js"
}

כאן גדרנו שהסקריפט ״start" יריץ את הפקודה node app.js
כדי להריץ את הסקריפט כתבו את הפקודה:
npm run dev


התקנה גלובלית של חבילה

npm install -g nodemon

שרת Express- שרת http פופולרי בnode

npm install express
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:

"type": "module"

אפשר:

import fs from "fs";

npx

מריץ חבילות בלי להתקין:

npx create-react-app myapp

גרסאות חבילות

"express": "^4.18.0"

^ = מאפשר עדכון מינורי
~ = מאפשר רק patch


עדכון חבילות

npm update

אבטחה

npm audit
npm audit fix

פרסום חבילה ל-npm

npm login
npm publish