מה זה דנו? Node.js 'טוב יותר'

אם אתה אוהב את Node.js אך לא את ה- npm של מנהל החבילות שלו, או אם אתה רוצה סביבת זמן ריצה מאובטחת יותר של JavaScript מאשר Node.js, ייתכן שתמצא את פרויקט הקוד הפתוח החדש Deno of interest (המילה Deno היא אנגרמה של Node). מצד שני, אם אתה משתמש ב- Node.js בייצור, אין מה לראות כאן, להמשיך הלאה - דנו עדיין "מאוד בפיתוח".

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

דנו ו- JavaScript מתקדם

בשנת 2009, ב- JavaScript חסרו כמה תכונות שהיו שימושיות עבור Node.js, על פי דאהל. כמה מהם נוספו ל- JavaScript במהלך השנים כחלק מתקן ECMAScript (ES), ו- TypeScript התייחס למספר נוסף.

ל- JavaScript היו אירועים וקורבקים בעיקר לנצח, אך הם יכולים להוביל לקוד מסובך למדי, במיוחד כאשר ברצונך לשרשר פעולות אסינכרוניות. הבטחות הופכות את התחביר לקריא מעט יותר. A promiseהוא אובייקט מוחזר המייצג בסופו של דבר השלמה או כישלון של פעולה אסינכרונית, אליה תוכלו לצרף שיחות חוזרות, בניגוד להעברת שיחות חוזרות לפונקציה. הכרזה על פונקציה asyncמפשטת עוד יותר את התחביר, ומאפשרת לך להשתמש awaitבפונקציה כדי להשהות באופן שאינו חוסם עד להסדרת ההבטחה.

כאשר נוצר Node.js, הסטנדרט בפועל עבור מודולי JavaScript היה CommonJS, וזה מה שתומך ב- npm. מאז ועדת ECMAScript ברכה רשמית על תקן אחר, ES Modules, וזה מה שתומך ב- jspm. דנו תומך במודולי ES.

מערכים מודפסים הם ממשק API של ES6 לטיפול בנתונים בינאריים, משהו ש- Node.js יכול היה להשתמש בו; היעדר תמיכה בנתונים בינאריים הוביל לכמה בעיות בעיצוב של Node.js. דנו משתמש במערכים שהוקלדו כאשר הוא צריך לתפעל נתונים בינאריים גולמיים. Node.js תומך כעת במערכים שהוקלדו עבור קוד משתמש.

TypeScript הוא ערכת-על מוקלדת של JavaScript שמתכנסת ל- JavaScript רגיל (ES3 ומעלה; ניתן להגדרה). TypeScript מוסיף ל- JavaScript סוגים, מחלקות ומודולים אופציונליים ותומך בכלים ליישומי JavaScript בקנה מידה גדול. (אנדרס הילסברג מכנה את זה "JavaScript שמתרחש.") כפי שצוין קודם לכן, Deno מכיל תמונה של מהדר TypeScript כחלק מזמן הריצה שלו. אם תעביר ל- Deno קובץ TypeScript תחילה הוא ירכיב אותו ל- JavaScript ואז יעביר אותו למנוע V8.

חסרונות בעיצוב Node.js

לדברי דאהל, שבכל זאת עיצב גם את Node.js וגם את Deno, Node.js סובל משלוש בעיות עיקריות עיקריות:

  • מערכת מודולים מעוצבת בצורה גרועה, עם הפצה מרכזית;
  • המון ממשקי API מדור קודם שיש לתמוך בהם;
  • וחוסר ביטחון.

דנו מתקן את כל שלוש הבעיות. 

דנו ביצוע מוצלח

הדרך בה דנו משפרת את האבטחה ביחס ל- Node.js היא פשוטה: כברירת מחדל, דנו לא נותן לדיסק לגשת לדיסק, לרשת, לתהליכי משנה או למשתנים סביבתיים. כאשר אתה צריך לאפשר כל אלה, תוכל להצטרף באמצעות דגל שורת פקודה, שיכול להיות גרגירי ככל שתרצה, למשל --allow-read=/tmpאו --allow-net=google.com. שיפור אבטחה נוסף ב- Deno הוא שהוא מת תמיד על שגיאות שלא נתפסו, בניגוד ל- Node.js, שיאפשר לבצע את הביצוע אחרי שגיאה שלא נתפסה, עם תוצאות שאינן צפויות מראש.

מודולי דנו

ב- Node.js, אתה טוען מודולי CommonJS באמצעות requireמילת המפתח וכולם, רגילים וצד שלישי כאחד, מרמזים מ- npmjs.com. ב- Deno, אתה טוען מודולי ES באמצעות importמילת המפתח ומציין במפורש את כתובת האתר. לדוגמה:

ייבא * כ יומן מ "//deno.land/std/log/mod.ts";

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

ל- Deno אוסף מרוכז של מודולים סטנדרטיים שאין להם תלות חיצונית והם נבדקים על ידי צוות הליבה של Deno; הוא חי על שרת deno.land. אוסף המודולים deno_std הוא יציאה רופפת של הספרייה הסטנדרטית של Go.

יש היסטוריה קטנה מאחורי בחירת המודל לספרייה. דאל כתב את האב-טיפוס שלו לדנו בעיקר בשפת ה- Go, אך גילה סכסוכים פוטנציאליים בין אספני האשפה ב- Go ו- V8. לאחר מכן, הוא ושיתופי הפעולה שלו כתבו מחדש את דנו עם V8, Rust וחבילת ה- I / O האסינכרונית של Rust, Tokio. הם הטמיעו את הספרייה הסטנדרטית של Deno ב- TypeScript.

בשלב זה, Deno היא סביבה סבירה ומהנה לשימוש לבניית פרויקטים קטנים של סקריפטים פרטיים ב- TypeScript. לדברי דאהל, דנו לעולם לא באמת ישפיע על ההצלחה של Node.js. עם זאת, ברגע שדנו יגיע לגירסת 1.0 הוא עשוי להפוך לבחירה בת קיימא לבניית פרויקטים גדולים יותר.