كيفية حل الخطأ 'لم يتم تعريف الطلب' في JavaScript/Node.js

Kyfyt Hl Alkhta Lm Ytm T Ryf Altlb Fy Javascript Node Js



أثناء رحلة البرمجة، قد نواجه أخطاء مختلفة مثل أخطاء بناء الجملة أو أخطاء وقت التشغيل. الخطأ المرجعي هو خطأ وقت التشغيل. يحدث خطأ مرجعي عند الإشارة إلى متغير غير مهيأ أو متغير غير موجود في النطاق الحالي. الخطأ 'يتطلب لم يتم تعريفه' هو خطأ مرجعي يشير إلى وجود مشكلة في الكلمة الأساسية 'يتطلب'.

تتناول هذه المقالة بالتفصيل أسباب حدوث هذا الخطأ والطرق التي يمكننا من خلالها إصلاحه.

كيفية حل الخطأ 'لم يتم تعريف الطلب' في JavaScript/Node.js؟

يحدث الخطأ المرجعي 'لم يتم العثور على الطلب' عندما يتم العثور على الدالة require() في ملف JavaScript الذي كان من المفترض تنفيذه في متصفح الويب بدلاً من بيئة Node.js.







ما هي وظيفة تتطلب ()؟

الدالة require()‎ لها نطاق عالمي ويتم تقديمها بواسطة Node.js. يقوم بتحميل وتشغيل الوحدات في تطبيق Node.js. العديد من المتصفحات لا تدعم Node.js لذا فإن وظيفة require()‎ غير متوفرة فيها.



متى يحدث هذا الخطأ؟

يحدث هذا الخطأ عادةً عند استخدام JavaScript في كلا المتصفحين بالإضافة إلى Node.js. يمكن أن يحدث الخطأ بثلاث طرق:



  • عند استخدام الدالة require() في بيئة المتصفح.
  • عند استخدام الدالة require() في Node.js وملف package.json، يتم تعيين النوع على 'module'
  • عند استخدام الدالة require() في Node.js، يكون للملفات امتداد .mjs.

باستخدام بناء الجملة const ' myFile = يتطلب ('./my-file') 'في بيئة مستندة إلى الويب سيؤدي إلى ظهور خطأ يبدو كالتالي:





دعونا نناقش الحلول المختلفة لحل هذا الخطأ.



الحالة 1: خطأ في بيئة المتصفح

تعمل الدالة require()‎ بشكل خاص في Node.js. تتوافق معظم المتصفحات مع Node.js لذا فهي لا تدعم وظيفة require()‎. تعمل وحدة تصدير استيراد وحدة ES6 على حل الخطأ 'لم يتم تعريف الخطأ المرجعي المطلوب'. فيما يلي مثال للكود الذي يوضح كيفية القيام بذلك:

نوع الوثيقة أتش تي أم أل >

< جسم >





< نوع البرنامج النصي = 'وحدة' src = 'index.js' >< النصي >

< نوع البرنامج النصي = 'وحدة' src = 'ملف.js' >< النصي >

جسم >

لغة البرمجة >

يتم تحميل Index.js أولاً حتى يمكن الاستفادة من وظائفه في file.js.

ملف Index.js

يحدد ملف Index.js منتج دالة ومتغيرين x وy:

منتج وظيفة التصدير ( أ، ب ) {

يعود أ * ب ;

}

يصدّر مقدار ثابت = 10 ;

يصدّر مقدار ثابت و = 'تايلور'

file.js

يمكن استخدام الوظائف من ملف Index.js في ملف js الآخر المسمى file.js. يبدو File.js كما يلي:

يستورد { المنتج، س، ص } من './index.js' ;

وحدة التحكم. سجل ( منتج ( 10 , 5 ) ) ; // سيتم عرض 50

وحدة التحكم. سجل ( س ) ; // سيتم عرض 10

وحدة التحكم. سجل ( و ) ; // سيتم عرض 'تايلور'

انتاج |

يعرض الإخراج التالي كيف يمكن إزالة الخطأ 'لم يتم تعريف الطلب' في بيئة المتصفح باستخدام وحدة تصدير الاستيراد ES6:

الحالة 2: حدث خطأ أثناء العمل في Node.js

في ملف package.json، يؤدي تعيين خاصية النوع باستخدام وحدة القيمة إلى حدوث هذا الخطأ. يمكن أن يحدث ذلك أيضًا إذا تم استخدام الدالة require() في الملف ذو الامتداد .mjs.

يمكن إزالة هذا الخطأ عند إزالة خاصية النوع المعينة إلى الوحدة النمطية وإعادة تسمية أي ملف بملحق .mjs إلى .js.

//package.json

{

// قم بإزالة خاصية النوع المعينة للوحدة النمطية لاستخدامها require()

'يكتب' : 'وحدة' ,

}

ملف Index.js

يعرّف ملف Index.js دالة 'المنتج' والمتغيرات x وy بنطاق المتغير. إليك كيف سيبدو ملف Index.js:

منتج وظيفي ( أ، ب ) {

يعود أ * ب ;

}

عالمي. س = 13 ;

عالمي. و = 'سريع' ;

وحدة. صادرات = {

منتج،

} ;

file.js

يأخذ منتج الوظيفة من ملف JS Index.js باستخدام الكلمة الأساسية require(). سيبدو الملف file.js بالشكل التالي:

مقدار ثابت { منتج } = يتطلب ( './index.js' ) ;

وحدة التحكم. سجل ( منتج ( 10 , 9 ) ) ; // سيتم عرض 90

وحدة التحكم. سجل ( س ) ; // سيتم عرض 13

وحدة التحكم. سجل ( و ) ; // سيتم عرض 'سريع'

انتاج |

يعرض الإخراج كيف يمكن حل الخطأ 'لم يتم العثور على الطلب' عن طريق إزالة خاصية النوع المعين على الوحدة النمطية من ملف package.json:

أشياء للذكرى

  • يتطلب بناء جملة وحدة ES6 لاستيراد وحدة أن تكون محددًا بشأن امتداد ملف الوحدة. يجب أن تعرف جافا سكريبت نوع الملف لمعالجته بشكل صحيح.
  • لا يمكن استخدام وحدة ES6 في نفس الوقت مع الدالة require()‎.

خاتمة

يؤدي استخدام بناء جملة وحدة ES6 في المتصفح إلى حل المشكلة 'لم يتم تعريف الطلب' وإلا يجب تشغيل مقتطف التعليمات البرمجية في Node.js. يحدث الخطأ عند استخدام الدالة require() في المتصفح. ناقشت هذه المقالة كيف يمكن حل مشكلة 'الطلب غير محدد' بمثال.