Menu

Node.js מול JavaScript: מה ההבדל?

JavaScript היא השפה; Node.js היא תוכנה שמריצה אותה מחוץ לדפדפן. התחביר זהה, אבל האובייקטים הגלובליים וה-APIs המובנים שמסביב לקוד שונים.

בדף הזה יש עורכים שאפשר להריץ. לערוך, להריץ ולראות את הפלט מיד.

JavaScript היא שפת תכנות; Node.js היא סביבת הרצה (runtime), תוכנה שמריצה JavaScript מחוץ לדפדפן. התחביר, הטיפוסים והאובייקטים הסטנדרטיים (Array, Promise, JSON) זהים בשניהם. מה שמשתנה הוא הסביבה סביב הקוד: דפדפן נותן לכם window ו-document כדי לעבוד עם דף web, ו-Node.js נותן לכם global, process, require ומודולים כמו fs כדי לעבוד עם קבצים, שרתים ומערכת ההפעלה.

האובייקטים הגלובליים של הדפדפן הדפיסו undefined, אלה של Node.js הדפיסו object או function, והשורה האחרונה הדפיסה true, כי ב-Node.js globalThis ו-global הם אותו אובייקט. הדביקו את שש השורות הראשונות ב-console של דפדפן והתוצאות יתהפכו.

ההבדל בטבלה אחת

JavaScript בדפדפןJavaScript ב-Node.js
מה זההשפה, שרצה במנוע של הדפדפןאותה שפה, שרצה בסביבת ההרצה Node.js (V8)
האובייקט הגלובליwindowglobal
עובד מולהדף: document, ה-DOM, אירועיםהמחשב: fs, http, process, os
מודולים<script type="module">, importrequire (CommonJS) ו-import (ES modules)
חבילותנארזות לתוך הדףמותקנות ב-node_modules עם npm
קלטקליקים, טפסים, אירועי מקלדתארגומנטים משורת הפקודה, קלט סטנדרטי, בקשות HTTP
Array, Promise, JSON, setTimeout, consoleכןכן

שורת המודולים היא זו שמבלבלת הכי הרבה. Node.js תומך בשתי השיטות, require ו-import, ודפדפנים מבינים רק import. הדף CommonJS מול ES modules מסביר באיזו לבחור.

השפה זהה

פונקציה שמשתמשת רק בשפה רצה בכל מקום. בבלוק הזה אין שום דבר שייחודי ל-Node, והוא היה מדפיס את אותן שורות גם בדפדפן:

הוא הדפיס {"best":95,"average":85} ו-Passed: 2 of 3. תחביר ה-spread, reduce, תבניות מחרוזת ו-JSON שייכים לשפה ומוגדרים בתקן ECMAScript, ולכן הם קיימים בכל סביבת הרצה.

מה יש רק ב-Node.js

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

הוא כתב קובץ, קרא אותו בחזרה והדפיס .txt 2 lines, ואז רשימה ריקה של ארגומנטים. לא גישה לקבצים ולא process.argv קיימים בדפדפן, שבו דף לא יכול לגעת בדיסק שלכם.

אילו יכולות של השפה תקבלו

לשפה יש גרסאות (ES2015, ES2020, ES2024 וכן הלאה), וכל מנוע מוסיף יכולות חדשות בקצב שלו. Node.js מגיע עם מנוע V8 מסוים בכל גרסה, כך שגרסת ה-Node.js שלכם קובעת אילו יכולות עובדות: Object.groupBy ו-Array.prototype.findLast, למשל, דורשים גרסה עדכנית. לכן טבלאות תמיכה של דפדפנים מציגות את Node.js כעוד עמודה לצד Chrome, Firefox ו-Safari. כשתחביר חדש נכשל עם SyntaxError או שמתודה היא undefined, הריצו node --version, ושדרגו לפני שאתם מחפשים polyfill.

קוד שרץ בשתי הסביבות

כותבי ספריות בודקים לפעמים איפה הקוד שלהם רץ לפני שהם משתמשים ב-API ייחודי לסביבה:

const isNode = typeof process !== 'undefined' && process.versions?.node != null;
const isBrowser = typeof window !== 'undefined';

כשאפשר, בדקו את היכולת שאתם צריכים ולא את שם הסביבה: typeof fetch === 'function' אומר יותר מאשר "האם זה Node". לשתיהן יש היום fetch, URL, TextEncoder, setTimeout ו-structuredClone, כך שפחות קוד צריך בדיקה כזו מאשר לפני כמה שנים.

טעויות נפוצות

שימוש ב-document או ב-window בסקריפט Node.js. תקבלו ReferenceError: document is not defined. הקוד הזה שייך לדפדפן.

שימוש ב-require בדפדפן. אין אותו בדפדפנים. השתמשו ב-import, או ב-bundler שהופך קריאות require לקובץ אחד.

לחשוב ש-Node.js היא שפה אחרת. היא לא. אם מדריך JavaScript מלמד משהו, זה עובד ב-Node.js, אלא אם הוא משתמש ב-DOM.

שאלות נפוצות

אפשר ללמוד Node.js בלי ללמוד JavaScript?

לא ממש. כל שורה שכותבים ב-Node.js היא JavaScript, אז השפה באה קודם. אחרי שמכירים פונקציות, אובייקטים ו-promises, Node.js הוא אוסף של APIs נוספים ללמוד.

למה אני מקבל "document is not defined" ב-Node.js?

document הוא ה-DOM של הדפדפן, וב-Node.js אין דף שיספק אותו. קוד שנוגע ב-document או ב-window צריך לרוץ בדפדפן, או בסביבת בדיקות שמדמה את ה-DOM, כמו jsdom.

TypeScript זה אותו דבר כמו Node.js?

לא. TypeScript היא גרסה של JavaScript עם טיפוסים שמתקמפלת ל-JavaScript. אפשר להריץ את התוצאה ב-Node.js או בדפדפן, וגרסאות חדשות של Node.js יכולות גם להריץ הרבה קבצי .ts ישירות על ידי הסרת הטיפוסים.

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל