נטשתי את Node.js לטובת Bun ואני לא מתכוון לחזור לעולם
נטשתי את Node.js לגמרי ואני לא מתכוון לחזור.
הייתי מכור לNode.js במשך שנים. מאות פרויקטים, אלפי שורות קוד, עשרות קבצי package.json שמנים שיושבים להם בשקט על השרתים שלי. Node.js היה הבית שלי, המקום הבטוח, הדבר שידעתי לעשות עם עיניים עצומות. ואז יום אחד, מתוך סקרנות טהורה התקנתי את Bun. ומאז? מאז אני לא מסתכל אחורה.
זה לא היה רגע דרמטי. לא היתה קריאת יוריקה. זה היה יותר כמו מישהו שנוהג שנים ברכב ישן ונאמן, ופתאום מתיישב ברכב חדש ומבין שכל הזמן הזה הוא פשוט התרגל לרעש המנוע. Bun הוא השקט הזה. הוא המהירות הזאת. הוא הפשטות שלא ידעתי שאני צריך עד שטעמתי אותה.
הביצועים הם לא סתם שיפור. הם עולם אחר.
Bun יושב על מנוע JavaScriptCore אותו מנוע שמניע את Safari. זה לא V8, המנוע המוכר של Chrome ושל Node.js. ההבדל? JavaScriptCore נבנה עם פילוסופיה שונה לחלוטין. הוא לוקח פחות זיכרון, מתנהל בצורה חסכונית יותר, ובכל זאת מספק ביצועים שמרגישים כמו רמאות ביחס לכל מה שהכרנו. אם זה לא מספיק, הבסיס של Bun עצמו כתוב ב-Zig, שפה שמאפשרת שליטה ברמה נמוכה ואופטימיזציה אגרסיבית. כמעט 90% מהקוד של Bun הוא קוד נייטיב. בעוד Node.js? כ-62% מהקוד שלו כתוב ב-JavaScript עצמו. וזה מורגש. מאוד.
TypeScript מובנה. תקראו את זה שוב. מובנה.
אני זוכר את הימים של הגדרת TypeScript בפרויקט Node.js. tsconfig.json, ts-node, nodemon שצריך לדעת לעבוד עם ts-node, בילדים שנשברים, source maps שמשתגעים, חבילות שלא מזהות את הטייפים. כל פרויקט חדש דרש טקס חניכה שלם רק כדי לכתוב קובץ עם סיומת ts.
בBun? אתה פותח קובץ, כותב TypeScript, מריץ bun run. זהו. נקודה. אין התקנות, אין קונפיגורציות, אין שלבי בנייה מתווכים. זה לא סתם חסכון של חבילה אחת. זה קיצור של תהליך שלם שמצריך ידע, זמן, ותחזוקה מתמדת. כל מי שאי פעם ביזבז שעתיים על debugging של בעיה שהתבררה כקשורה לקומפילציית TypeScript מבין למה זה game changer אמיתי. פשוט כותבים קוד ומריצים. כמו שזה היה צריך להיות מההתחלה.
הפילוסופיה האהובה עלי - הכל כלול
יש לBun מטרה שאני לא יכול שלא להעריץ. בעולם של Node.js כל דבר דורש חבילה. רוצה להריץ טסטים? תתקין Jest. רוצה לבנדל את הקוד? תתקין Vite (אנשי webpack שלום ולא להתראות) רוצה חיבור למסד נתונים? עוד חבילה. רוצה לעבוד עם קבצי env? עוד חבילה. רוצה watch mode? עוד חבילה. עוד node_modules שמתנפח, עוד תלויות שצריך לתחזק ועוד שדרוגים שיכולים לשבור הכל.
Bun לוקח גישה אחרת לחלוטין. הוא אומר: למה שלא נבנה את הכל בתוך הרנטיים עצמו? ולא סתם נבנה, אלא נבנה טוב. bun test הוא test runner מובנה שתואם לJest ורץ מהר בצורה מגוחכת. bun build הוא bundler מובנה שמתחרה בesbuild וWebpack (כן Vite עדיין יותר טוב) מנהל החבילות bun install מהיר פי כמה מnpm (וכל כך יותר נוח שקשה לתאר). וכל הכלים האלה לא מרגישים כמו תוספות שדחפו פנימה בכוח. הם מרגישים כמו חלק אורגני מהמערכת, כי הם נייטיב, כתובים בקוד נמוך, ומותאמים למנוע עצמו. התוצאה היא ביצועים שחבילות חיצוניות פשוט לא יכולות להתקרב אליהם.
הספד קטן על Node.js
אני לא שונא את Node.js באמת שלא. הוא בנה את הקריירה שלי, ואני חייב לו הרבה. אבל בואו נהיה כנים לרגע. Node.js נושא על הגב שלו משקל אדיר של תאימות לאחור. כל שינוי שם עובר ועדת בחינה, ארגון, דיונים שנמשכים חודשים, והתוצאה היא שיפורים זעירים שמגיעים לאט מדי. המודולרים של ES עדיין מרגישים כמו אורח לא רצוי ליד CommonJS. הAPI הישן עדיין קיים לצד החדש כי אי אפשר לשבור שום דבר. זה מובן. זה אחראי. זה גם מתסכל מאוד כשאתה יודע שאפשר אחרת.
Bun לא צריך לדאוג למיליוני פרויקטים ישנים. הוא חופשי לעצב את עצמו נכון מההתחלה. הוא לא גורר שרשראות של החלטות ארכיטקטוניות מ-2009. הוא לא צריך לשמור על תאימות לגרסאות ישנות שכבר לא רלוונטיות. הוא פשוט בונה את הדבר הנכון, בצורה הנכונה, כאן ועכשיו. וזה מרגיש. כל פקודה שאתה מריץ, כל קובץ שאתה כותב, כל build שעולה, הכל מרגיש מודרני, חד, ומכוון למטרה.
יש משהו בעבודה עם Bun שקשה לתאר בצורה טכנית. זו הרגשה. כשאתה מתקין חבילות ב-bun install ומשהו שלקח שניות בnpm נגמר כמעט מיד, זה משנה את האנרגיה של העבודה. כשאתה כותב TypeScript בלי להגדיר שום דבר וזה פשוט עובד, יש לזה ערך שלא נמדד בבנצ'מרקים. כשאתה מריץ טסטים בלי להתקין Jest ובלי להגדיר קונפיגורציה ומקבל תוצאות ברגע, זה פשוט משחרר.
Bun מרגיש כאילו מישהו ישב ושאל את עצמו: "מה הדרך הכי ישרה, הכי נקייה, הכי מהירה לעשות את הדברים האלה?" ואז פשוט בנה את זה. בלי פשרות, בלי layers מיותרים, בלי מורשת שמכבידה. התוצאה היא כלי שמרגיש חדשני באמת, לא כמו גרסה משופצת של משהו ישן.
מה עדיין לא מושלם
אני לא כאן למכור חלומות (אולי קצת). Bun עדיין לא תואם 100% ל-Node.js. יש פערים קטנים. באופן אישי הדבר הבולט ביותר שנתקלתי בו הוא עבודה עם מודולים נייטיב כמו better-sqlite3, שפשוט לא עובדים כמו שצריך כי הם מתבססים על binding-ים שנכתבו ספציפית לV8 ולNode.js. זה מובן לגמרי ויש לזה פתרונות. הרי Bun כולל bun:sqlite מובנה שעובד הרבה יותר טוב, אז בפועל אתה בכלל לא צריך את החבילה החיצונית הזו.
מעבר לזה? לא באמת נתקלתי בבעיות משמעותיות. רוב החבילות של npm עובדות, רוב הפרויקטים פשוט רצים. והתאימות משתפרת בכל גרסה.
אז למי זה מתאים?
לכל אחד. באמת. אם אתה מתכנת שעובד עם JavaScript או TypeScript, אני ממליץ לך לתת לBun צ'אנס. לא צריך לזרוק הכל. תתקין ופשוט תריץ פרויקט קיים, תראה איך זה מרגיש. תנסה את המנהל חבילות ותראה את המהירות. תכתוב קובץ TypeScript ותריץ אותו ישירות. תראה איך הכל פשוט נהיה מהיר יותר בלי שום צורך בשינויים דרסטיים.
הסיכוי שתחזור אחורה? נמוך מאוד.
אני לא אגיד שNode.js מת. הוא לא. הוא עדיין ענק, עדיין יציב, עדיין בכל מקום. אבל הכיוון ברור. העתיד של JavaScript runtime נראה אחרת ממה שהכרנו. הוא נראה מהיר יותר, פשוט יותר, ומאוחד יותר. הוא נראה כמו Bun.