• בלוג
  • 3 פיצ'רים עדכניים של Node שאהבתי במיוחד

3 פיצ'רים עדכניים של Node שאהבתי במיוחד

21/10/2022

מצד אחד העובדה שכל שבועיים יוצאת גירסה חדשה של נוד היא קצת מעייפת, ובמיוחד כשנזכרים שברוב הגירסאות יש יותר תיקוני אבטחה מפיצ'רים מלהיבים, אבל בכל זאת פעם בכמה גירסאות יש שינוי שממש כיף לשלב בקוד חדש שכותבים. הנה 3 שינויים כאלה מהתקופה האחרונה שאני משלב בקוד באופן קבוע:

1. מעבר ל import

שנים היתה הפרדה בין node לדפדפן כשדפדפנים משתמשים ב import ו node ב require. גם היום בגירסאות עדכניות של נוד, ניסיון להריץ קוד עם import יציג הודעת שגיאה מוזרה:

SyntaxError: Cannot use import statement outside a module

אבל הפעם יש פה יותר מגרעין של אופטימיות - אי אפשר להשתמש ב import מחוץ למודול, אומר שאפשר להשתמש ב import בתוך מודול.

יש שתי דרכים לשכנע את נוד שאנחנו בעולם המודולים, הראשונה היא להוסיף לקובץ package.json את המפתח type עם הערך module, לדוגמה קובץ כזה יעבוד:

{
  "name": "games",
  "type": "module",
  "version": "1.0.0",
  "description": "",
  "main": "hello.js",
  "keywords": [],
  "author": "",
  "license": "ISC"
}

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

import * as readline from 'node:readline/promises';
import { stdin as input, stdout as output } from 'node:process';

const rl = readline.createInterface({ input, output });
const question = "Who are you? "

while(true) {
  const answer = await rl.question(question);
  console.log(`Welcome, ${answer}`);
}

באותו הקשר עוד שתי פנינים מהקוד הזה:

  1. שימו לב לתחילית node: לפני שם המודול. זה אומר שאנחנו טוענים מודול מובנה ב node. לא חייבים לכתוב ככה אבל מומלץ, כי אם תהיה לכם שגיאת כתיב נוד לא יתבלבל וינסה לטעון מודול מספריית node_modules בטעות.

  2. ממשק ה Promises ו async/await כבר עובד ממש טוב ב Node, כולל במודולים מובנים ואפילו בלולאה הראשית (לא צריך לכתוב פונקציית main אסינכרונית).

2. מצב Watch

זוכרים את nodemon? שנים השתמשנו בו כדי להפעיל מחדש תוכניות נוד כשהקוד משתנה. תשמחו לשמוע שכבר אין בו צורך כי ל node יש מצב ריענון אוטומטי. אם קראתי לתוכנית hello.mjs אני יכול להפעיל משורת הפקודה:

$ node --watch hello.mjs

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

3. טעינת קבצי JSON עם import

לא ברור למה אבל לכתוב import לקובץ json זה פשוט הרבה יותר נוח מלקרוא את הקובץ ולפענח את ה JSON. בהנחה שיש לכם קובץ JSON בתיקיה בשם data.json עם התוכן הבא:

{
  "text": "Who goes there?"
}

תוכלו לבקש מ Node שיטען אותו וידפיס את הטקסט מתוכו עם הקוד הבא:

import data from './data.json' assert { type: "json" };

console.log(data.text);

וכן ה assert שם בסוף שורת ה import קצת מוזר אבל בשביל פיענוח אוטומטי של JSON-ים אני מוכן לשלם את המחיר.