اذهب إلى المحتوى

السؤال

نشر

أحاول استخدام الباني constructor لمجموعة من الأغراض بالشكل التالي:

class Social {
  constructor(tags) {
    this._tags = tags
  }

  printUsername() {
    return 'My name is John'
  }
}

والآن عندما أقوم بإضافة التصدير بالشكل التالي:

module.exports = Social

لا تحدث أي مشكلة، ولكن إذا قمت بإضافتها بالشكل التالي:

export default Social

يظهر لدي خطأ بأن Social is not a constructor.

فما هو الفرق بين هذه الطريقتين ولماذا يحدث خطأ عند استخدام إحداها في بعض الأحيان؟

Recommended Posts

  • 0
نشر

هذا لأن node لا يدعم es6 syntax بعد ولكن اذا كنت تريد ذلك يمكنك أن تثبت مكتبة esm فهي تفعل لك استخدام es6 في node

npm install esm

بعدها عدل start script في ملف package.json

{
  "name": "My-app",
  "version": "1.0.0",
  "description": "Some Hack",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node -r esm index.js"
  },

}

 

  • 0
نشر

ذلك بسبب أن ال export default من خصائص ال es6 وتعتبر هذه النسخة من JavaScript غير مدعومه حالياً لذلك ينبغي عليك عند استخدام التصدير بالشكل التالي

export default Social

استخدام transpiler مثل babel لتقوم بتحويل ال es6والإصدارات اللاحقة إلى كود مدعوم من جميع المنصات والمتصفحات

  • 0
نشر

تم تصميم JavaScript لكي نستطيع إضافة التفاعلية في صفحات الويب ولم يكن هناك حاجة لإستيراد وتصدير أكواد

ولكن مع تطور تطبيقات JavaScript وأصبحت الأكواد كثيرة جداً ومن الصعب تطوير تطبيقات JavaScript ذات الحجم الكبير في ملف واحد، وايضاً ظهور Nodejs لتشغيل JavaScript خارج المتصفح ظهرت الحاجة لتصدير وإستيراد أكواد JavaScript فتم إنشاء CommonJS في Nodejs لتصدير وإستيراد الأكواد عبر module.exports و ()require

اما التصدير عبر export والإستيراد عبر import فهو جديد في إصدار ES6 وnodejs كان لايدعمه سابقاً أما الآن فيدعم هذه الطريقة ، ولكن لإستخدام لديك طريقتين لإستخدام طريقة ES6

  1. عبر تسمية ملفات الأكواد الذي تصدر وتستورد الأكواد بصيغة mjs. بدلاً من js.
  2. إذا لم تُرد عمل السابق فيمكنك إضافة هذا العلم في package.json
--input-type=module

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...