Node.js module.export לעומת יצוא

מה הם, כיצד להשתמש בהם ואיך לא להשתמש בהם

(שים לב שמאמר זה נכתב לאחר שחרור Node.js 6.1.0)

TL; DR

  • חשוב על module.export כמשתנה שחוזר מ- require (). זהו אובייקט ריק כברירת מחדל, וזה בסדר לשנות לכל דבר.
  • יצוא? ובכן, "היצוא" עצמו לעולם לא מוחזר!זוהי רק התייחסות ל- module.exports; משתנה נוחות שיעזור למחברי המודולים לכתוב פחות קוד. עבודה עם תכונותיו בטוחה ומומלצת.
exports.method = function() {…} 
vs.
module.exports.method = function() {…}

דוגמה פשוטה למודול

ראשית, אנו זקוקים לדוגמא לבסיס קוד. נתחיל במחשבון פשוט:

נוֹהָג:

עטיפת המודול

Node.js עוטף באופן פנימי את כל הדרישות () - ed במעטפת פונקציות:

אובייקט המודול

משתנה " מודול " הוא אובייקט המייצג את המודול הנוכחי. זה הוא מקומי לכל מודול וזה גם פרטי (נגיש רק מתוך קוד מודול):

Module.export

  • זה הפניה לאובייקט שמוחזרת מהשיחות הדורשות ().
  • הוא נוצר באופן אוטומטי על ידי Node.js.
  • זוהי רק התייחסות לאובייקט JavaScript רגיל.
  • הוא גם ריק כברירת מחדל (הקוד שלנו מצרף אליו שיטת "הוסף ()")

ישנן שתי דרכים בהן אנו יכולים להשתמש ב- module.exports:

  1. הצמדת שיטות ציבוריות אליו (כמו שעשינו בדוגמת המחשבון).
  2. החליף אותו עם החפץ או הפונקציה המותאמות אישית שלנו.

למה להחליף אותו? בעת החלפה, אנו יכולים להחזיר כל מקרה שרירותי של מעמד אחר. הנה דוגמה שנכתבה ב- ES2015:

למעלה, "בסיס מחשבון" מייצא כיתה.

בואו נרחיב את הכיתה "מחשבון" ונייצא הפעם מופע:

נוֹהָג:

כינוי לייצוא

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

    (למשל: exports.add = פונקציה ...)

  • היצוא אינו מוחזר על פי דרישה () (module.exports הוא!)

הנה כמה דוגמאות טובות וכמה דוגמאות רעות:

הערה: מקובל להחליף את module.export בפונקציות או אובייקטים מותאמים אישית. אם נעשה זאת אך עדיין נרצה להמשיך להשתמש בקיצור "הייצוא"; ואז יש להצביע מחדש על "יצוא" לאובייקט המותאם אישית החדש שלנו (נעשה גם בקוד לעיל בשורה 12):

exports = module.exports = {}
exports.method = function() {...}

סיכום

משתנה בשם ייצוא שאינו מיוצא לחלוטין מבלבל, במיוחד עבור אנשים חדשים ב- Node.js. אפילו לתיעוד הרשמי יש גם מעט מוזר:

כהנחיה, אם הקשר בין ייצוא ל- module.exports נראה לכם קסם, התעלמו מיצוא והשתמשו רק ב- module.exports.

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

תודה שקראת את הפוסט שלי. משוב ומחשבות תמיד מתקבלים בברכה בסעיף ההערות.

lazlojuly

מאמרים קשורים:

  • האם המודולים של Node.js הם יחידים?

מקורות:

  • תיעוד של Node.js על מודולים

צפה בסדרת הבלוגים החדשה שלי בנושא בדיקות יחידות יחידה:

כיצד להתחיל בבדיקת יחידות? חלק 1

אני מניח שרבים מאיתנו יכולים להתייחס למצב המתואר לעיל.

מקום בו, בדיקת יחידות נחשבת כמטלה. medium.com