כיצד לפתור את השגיאה 'שגיאת הפניה דורשת אינה מוגדרת'?

Kyzd Lptwr T Hsgy H Sgy T Hpnyh Dwrst Ynh Mwgdrt



Node.js אינו דבר בפני עצמו, קיומו תלוי במודולים ובשיטות המסופקים על ידי כל מודול. כדי לעבוד עם מודולים אלו, על המפתח להתקין אותו תחילה ולאחר מכן לייבא אותו לתוך הקובץ הפועל כעת. על מנת לייבא מודולים ישנן שתי דרכים המקושרות באופן ספציפי לגרסת ה-JavaScript בה המפתח משתמש כעת או שעליה בעל האפליקציה רוצה לבנות. בזמן הייבוא ​​יש סיכוי להתמודד עם שגיאות מרובות והשגיאה הפופולרית והנפוצה ביותר הקשורה ל' לִדרוֹשׁ() ' השיטה מתוארת ונפתרת.

מדריך זה מסביר את ההליך לפתרון שגיאות 'ReferenceError: require is not defined'.

כיצד לפתור את השגיאה 'ReferenceError: require is not defined'?

כדי לייבא מודולים חיצוניים או מובנים בפרויקט נעשה שימוש בשתי גישות, אלו הן באמצעות ' לִדרוֹשׁ() 'שיטה או' יְבוּא ' מילת מפתח. המוזכר ' ReferenceError: לא מוגדר ' מתמודד כאשר משתמש מנסה להשתמש ב-' לִדרוֹשׁ() שיטת ' בתוך ' מודול ES 'היקף. השגיאה הנדונה מופיעה כך במסוף ב-node.js כאשר הקוד האמור להלן מבוצע:









הסיבות להתרחשות השגיאה 'פתור 'ReferenceError: require is not defined' והפתרונות המתאימים שלהם מוסברים בסעיפים שלהלן.



סיבה 1: סוג היישום מוגדר למודול

אם האפליקציה שלך מציגה את השגיאה המוזכרת, הפתרון הקל והותיק ביותר הוא השינוי של ' package.json 'קובץ. חפש את צמד המפתח/ערך בעל ה-' מַפְתֵחַ 'של' סוּג ' והערך המוקצה של ' מודול '. זה הופך את הסביבה של כל האפליקציה למודולרית, מה שמונע את השימוש ב'ישן' CommonJS 'מודולים ושיטות. הייצוג החזותי של צמד מפתח/ערך זה מופיע כך:





'סוּג' : 'מודול' ,

פתרון: הסר את מפתח 'סוג'.

הפתרון הוא הסרת ה' סוּג ' מפתח וערך שהוקצה מפרויקט node.js ' package.json 'קובץ. ההסרה מקובץ 'package.json' מנצלת את היקף מודול ES6 והופכת את שיטת 'require() לניתנת לעבודה. כעת, כאשר אותו קוד יבוצע שוב, לא תהיה התרחשות של שגיאה.



סיבה 2: עבודה ב-'.mjs קוֹבֶץ

ה ' .mjs ' הוא קובץ קוד מקור של מודול JavaScript. הוא מכיל קוד בתוך סביבת המודול לא ב' CommonJS ' שמפצל את הקוד למספר קבצים לניהול טוב יותר. ה ' לִדרוֹשׁ() ' השיטה נמצאת תחת ' CommonJS '. זו הסיבה ששיטת ה'דרוש' תהפוך ללא מוגדרת כאשר נעשה בה שימוש בתוך ' .mjs ' סיומת הקובץ ומובילה להתרחשות השגיאה שהוזכרה:

פתרון: המר את סיומת הקובץ ל-'.cjs'

בדיוק כמו קוד מקור JavaScript מודולרי, סיומת הקובץ של ' .mjs ' זמין. ההרחבה של ' .cjs ' מסופק עבור ' CommonJS 'מודולים ומאפיינים. קובץ זה אינו מקבל ' מודולרי 'חבילות כמו' יְבוּא אבל עובד היטב עם גרסאות ES5. במקרה שלנו, סיומת הקובץ המשתנה תפתור את הבעיה הקשורה ל' לִדרוֹשׁ() ' שיטה:

גישה חלופית: השתמש בהצהרת ES6 'ייבוא/ייצוא'

ה ' לִדרוֹשׁ() שיטת ' מוגדרת ומסופקת על ידי ' CommonJs ' ומקובל עד לגרסת JavaScript של ES5 (ECMAScript 5). הוא פורסם בשנת 2009 וכעת התיישן מכיוון שהרבה מודולים עדכניים אינם תומכים בו או אינם פועלים כראוי ב-ES5. בדיוק כמו ה' לִדרוֹשׁ() השיטה מוחלפת כעת באופטימיזציה וקלה יותר יְבוּא ' הצהרות. העבודה של שני הגופים זהה אך ל'יבוא' יש יתרון עליון הודות לטכנולוגיה העדכנית ביותר ולקלות רבה יותר המסופקת על ידה.

עבור מודולים ברירת מחדל או חיצוניים

בהדגמה שלהלן, ההצהרה 'ייבוא' משמשת כחלופה לשיטת 'דרוש()' לייבוא ​​מודול ברירת המחדל או של צד שלישי:

יְבוּא readlineObj מ 'קריאת שורה' ;

לְנַחֵם. עֵץ ( readlineObj ) ;

לאחר הידור של הקוד שהוזכר, אותה משימה שצריך לעשות על ידי ' לִדרוֹשׁ() מתבצעת השיטה וה- ReferenceError: לא מוגדר ' לא יופיע גם כן:

עבור מודולים מותאמים אישית

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

app.js

const ExportVariable = 'מדריך זה מסופק על ידי Linuxhint!' ;

const פונקציית ייצוא = ( ) => {

לְנַחֵם. עֵץ ( ExportVariable ) ;

} ;

יְצוּא בְּרִירַת מֶחדָל פונקציית ייצוא ;

יְצוּא {

ExportVariable

} ;

ההסבר של בלוק הקוד לעיל הוא כדלקמן:

  • ראשית, המשתנה האקראי בשם ' ExportVariable ' מוגדרת ופונקציית החץ ' exportFunction() נוצר שמדפיס את ה-'exportVariable' שנוצר על גבי הקונסולה.
  • מילות המפתח של ' ברירת המחדל של ייצוא ' ו' יְצוּא ' משמשים כדי לייצא את ' exportFunction() ' ו' ExportVariable ' ישויות מהקובץ.
  • כאשר קובץ זה מיובא הפונקציה המיוצאת והמשתנים הופכים לזמינים לשימוש שם.

index.js

ה-'index.js' הוא הקובץ המשני שלנו שבו הפונקציה והמשתנה המיוצאים ייובאו וישתמשו בו, הוא מכיל את הקוד שצוין להלן:

יְבוּא פונקציית ייצוא, { ExportVariable } מ './app.js' ;

פונקציית ייצוא ( ) ;

לְנַחֵם. עֵץ ( ExportVariable ) ;

בקוד לעיל, ' יְבוּא הצהרת ' משמשת לייבא את ברירת המחדל ' exportFunction() ' והמשתנה ' ExportVariable ' מ ה ' app.js 'קובץ.

לאחר מכן, שתי הישויות המיובאות מופעלות ומוצגות על גבי המסוף למטרות אימות.

כעת, בצע את ' index.js ' קובץ באמצעות הפקודה המפורטת להלן:

אינדקס צומת. js

הפלט שנוצר מראה שאלמנטים מיובאים פועלים כהלכה מבלי לגרום ל-' ReferenceError: לא מוגדר שגיאה:

זה הכל על פתרון השגיאה שצוינה.

סיכום

כדי לפתור את ' ReferenceError: לא מוגדר שגיאה, הסר את ה-' סוּג 'מפתח בעל הערך של ' מודול ' מ ה ' package.json ' או שנה את סיומת הקובץ הפועלת כעת ל' .cjs '. במקרה שאתה רוצה לעבוד בגרסה המודולרית של ES6, במקום להשתמש ב-' לִדרוֹשׁ() שיטת ' השתמש ב' יְבוּא ' גישת הצהרות. מדריך זה הסביר את התיקונים האפשריים כדי לפתור את ' ReferenceError: לא מוגדר 'שגיאה' ב-node.js