DanLevy.net

ייצוא ESM: בשם מול ברירת מחדל?

לשמול, או לא לשמול?

Hero image for ייצוא ESM: בשם מול ברירת מחדל?

האם כדאי להשתמש בייצוא named או default ב-JavaScript?

אין מחסור במאמרים נחרצים בנושא זה.

הרוב שופטים את default export כ”נוראי.” אחרים טוענים ש-default צריך לנצח (למשל, מדריך הסגנון של AirBnb).

הם מאשימים לעיתים קרובות דברים זמניים לחלוטין: באגים בייבוא אוטומטי של IDE, יכולות tree-shaking של באנדלר מסוים, או האפשרות הפשוטה של טעויות הקלדה בעת מתן שם לייבוא.

האם פספסנו את הנקודה של export מלכתחילה?

קוד הוא תקשורת. ✨

אנו שולחים איתות ל-importרים כיצד להשתמש בדבר.

אז מה אנחנו אומרים?

באופן כללי, ישנן 2 דרכים לייצא דברים ב-JavaScript המודרני:

כמובן שאפשר לשלב בין שתי הגישות, או להשתמש בגישות שונות בחלקים שונים של בסיס הקוד. ראה דוגמאות נוספות בסוף המאמר.

טיעונים חלשים, בנאדם

בואו נתייחס לכמה מה”בעיות הזמניות” הנפוצות שאנשים נתקלים בהן.

// You can alias using both!
import { Knife as Handle } from "./knife.js"; // 🔪
import { default as Handle } from "./knife.js"; // 🔪
import Handle from "./knife.js"; // 🔪

סיכום

למעשה יש שילובים רבים של דרכים לייצא דברים, כל אחד מספר סיפור אחר:

ברירת מחדל (ייצוא)בשם (ייצוא)פונקציות פרטיותתבניתמשמעות
ייצוא ברירת מחדל אחד.”מציג פונקציה אחת עם מטרה יחידה!”
ייצוא בשם אחד.”בבקשה אל תשנה את שמי.”
ייצוא ברירת מחדל + פונקציות ‘פרטיות’ לא מיוצאות”הנה קצת לוגיקה קשורה. כמו כן, צפה להתנהגות דמוית מחלקה.”
ייצוא בשם מרובים, שם קובץ גנרי.”שקית מעורבבת של דברים קשורים באופן רופף, ללא היררכיה משתמעת.”
ייצוא בשם יחיד שמיוצא גם כברירת מחדל.”אתה לא יכול לפשל בייבוא שלי.”

משהו לחשוב עליו: מה אנחנו אומרים כששם הקובץ תואם או לא תואם לאחד מהייצואים שלו? (לדוגמה, utils.js עם פונקציות רבות.)

מסקנה

אם קוד הוא תקשורת, בבקשה export כאילו אתה מתכוון לזה לעזאזל. 💞