Node.js watch mode

לא חייבים להשתמש ב-nodemon בשביל לבצע watch אלא אפשר לעשות את זה באופן טבעי החל מ Node.js 18
Node.js Logo

מדי פעם יש פיצ׳רים ממש מעניינים ושימושיים בגרסאות של Node.js. אחד מהם הוא כל כך חביב שהתלהבתי ממנו וחשבתי לשתף. ה-Watch mode שזמין ב-Node.js 18 שהוא ה-LTS האחרון. (LTS, למי שלא יודע, זה Long-term support – כלומר גרסה שמתחייבים אליה לזמני תחזוקה ארוכים יותר ובדרך כלל הגרסה שאתם רוצים על שרתי הפרודקשן שלכם).

מה זה watch? הרילואוד האוטומטי בכל פעם שאני משנה את הקבצים שלי. בגדול, כשאני מריץ תוכנה ב-Node.js, התוכנה נטענת מקבצי הג׳אווהסקריפט הקיימים. אבל מה הבעיה? מה קורה כשאני משנה את הקבצים? התשובה היא שהתוכנה שנמצאת עכשיו ורצה לא מושפעת. וזה ״קצת״ מבאס כי אז אני צריך להרוג את התוכנה ולטעון אותה שוב.

על מנת להמנע מזה היו לנו פתרונות כמו nodemon. מה ש-Nodemon עשה זה להסתכל על כל הקבצים שאמרנו לו להסתכל עליהם ואם הוא זיהה שינוי באחד בהם (באמצעות FS.watch) אז הוא הרג את התוכנה ופתח אותה שוב. בעוד Nodemon היה שימושי למדי, עדיין מדובר בתוספת תוכנה חיצונית. עכשיו Node.js מגיע עם תוספת של watch. וזה נחמד מאוד.

אז איך מפעילים את זה? ובכן, בלי כאב ראש מיוחד אלא עם watch–

הנה למשל קוד http server פשוט שבפשוטים:

// Load the http module
const http = require('http');

// Configure our HTTP server to respond with 'Hello World' to all requests.
const server = http.createServer((request, response) => {
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end('Hello World!!!!!!');
});

// Listen on port 8080
server.listen(8080);

// Put a friendly message on the terminal
console.log('Server running at http://localhost:8080/');

אם אני שומר אותו ב-index.js, על מנת להפעיל אותו, אני צריך להשתמש ב node index.js. אבל אם אני אשנה אותו, אני אצטרך להרוג את התוכנה ולטעון אותה. איך עושים את זה אוטומטית? בעבר, על מנת להריץ אותו במוד watch, הייתי צריך להתקין אותו עם nodemon. ובכן, לא עוד. כדי להפעיל אותו, אני צריך לוודא שאני בגרסה 18.11.0 לפחות של Node.js ואז להשתמש בפלאג watch– באופן הבא:

node --watch index.js

וזהו!

ככה זה נראה:

node --watch index.js                                                                   
(node:73812) ExperimentalWarning: Watch mode is an experimental feature. This feature could change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
Server running at http://localhost:8080/

אם נשנה את קוד המקור ב-index.js אנו נראה שהקובץ נטען מחדש ונראה מיד את השינוי עם הריפרוש של הדף. אני אצטרך לרפרש את הדף ידנית בדפדפן, אבל לא להרוג את הפרוסס ולפתוח אותו שוב.

זה עובד לא רק בדוגמת ה-Hello World אלא גם בדוגמאות נוספות יותר מורכבות. למשל אם יש לי import של קובץ זה או אחר, שינוי בקבצים האלו יגרום לטעינה מחדש של הדף. אם אתם משתמשים בגרסה 18, כדאי להכיר. מה שעוד נחמד לדעת זה שישראלי בשם משה אטלו תרם לפיצ׳ר הזה. איזה יופי!

פוסטים נוספים שכדאי לקרוא

DALL·E 2023-10-21 22.28.58 - Photo of a computer server room with red warning lights flashing, indicating a potential cyber threat. Multiple screens display graphs showing a sudde
יסודות בתכנות

מבוא לאבטחת מידע: IDOR

הסבר על התקפה אהובה ומוצלחת שבאמצעותה שואבים מידע מאתרים

פתרונות ומאמרים על פיתוח אינטרנט

SSG עם next

אחרי שלמדנו במאמר הקודם מה זה SSR והבנו שלא מדובר בקליע כסף שפותר את כל הבעיות שלנו, נלמד על SSG שיכול להקל על כמה מהבעיות של SSR.

תמונה של הבית הלבן עם מחשוב ענן וטקסט: FEDRAMP
פתרונות ומאמרים על פיתוח אינטרנט

FedRAMP & FIPS מבוא למתחילים

פרק מיוחד, לצד הקלטה של פרק של עושים תוכנה על אחת התקינות החשובות ביותר עבור חברות שסביר להניח שלא הכרתם

ESP32 מאפס לילדים

מדריך ל-ESP32 לילדים ולהורים מאפס

אחד הדברים הכי כיפיים בעולם הוא תכנות ותכנות בעולם האמיתי – המפעיל אורות, ציוד אלקטרוני ומכשירים הוא מלהיב ממש. המדריך מיועד להורים שרוצים ללמד את הילדים שלהם לתכנת.

גלילה לראש העמוד