Modules Import And Export

في JavaScript، Modules أو “الوحدات” هي طريقة لتنظيم الكود بطريقة تجعل كل ملف يحتوي على جزء مستقل من التطبيق. هذه التقنية تُسهل إعادة استخدام الكود، وتقسيم المشروع إلى أجزاء واضحة، وتجنب تداخل المتغيرات والدوال في النطاق العام (global scope).

✅ ما هو الـ Module في JavaScript؟

الـ Module هو ملف JavaScript مستقل يمكنه تصدير (export) متغيرات أو دوال أو كائنات، ويمكن استيراد (import) هذه الصادرات في ملف آخر لاستخدامها.

🧩 أنواع التصدير (Export)
1. Named Export (تصدير بالاسم)

يُستخدم لتصدير أكثر من عنصر من ملف واحد.

✅ مثال:
// math.js
export const PI = 3.14;

export function add(a, b) {
  return a + b;
}

export const subtract = (a, b) => a - b;
JavaScript

🟢 الاستيراد:

// main.js
import { PI, add, subtract } from './math.js';

console.log(add(2, 3)); // 5
JavaScript

✅ ملاحظة: يجب استخدام نفس الأسماء عند الاستيراد.

2. Default Export (تصدير افتراضي)

يُستخدم لتصدير قيمة واحدة رئيسية من الملف.

✅ مثال:
// greet.js
export default function greet(name) {
  return `Hello, ${name}!`;
}
JavaScript

🟢 الاستيراد:

// main.js
import greet from './greet.js';

console.log(greet("Ali")); // Hello, Ali!
JavaScript

✅ ملاحظة: عند الاستيراد لا تحتاج إلى أقواس {} ويمكنك اختيار الاسم الذي تريده.

3. Mixed Export (تصدير افتراضي + مسمى)

يمكنك استخدام default + named exports في نفس الملف:

// utils.js
export default function sayHi(name) {
  return `Hi, ${name}`;
}

export const version = "1.0.0";
JavaScript
// app.js
import sayHi, { version } from './utils.js';

console.log(sayHi("Sara"));  // Hi, Sara
console.log(version);        // 1.0.0
JavaScript
📦 كيف يتم استخدام Modules؟
1. باستخدام ملفات JavaScript القياسية (ES6 Modules):
✅ في HTML:
<script type="module" src="main.js"></script>
JavaScript

✅ يجب أن تستخدم type="module" لكي تعمل أوامر import/export.

2. قواعد مهمة:
  • المسارات تبدأ بـ ./ أو ../ عند استيراد ملفات محلية.
  • لا يمكنك استخدام import و export خارج الوضع module.
  • لا يمكن استخدام import داخل if أو دالة (يجب أن تكون في المستوى الأعلى).

🧠 الميزات الأساسية للـ Modules:
الميزةالوصف
Scopeلكل ملف Module نطاق خاص به (no global pollution).
Lazy Loadingيتم تحميل الملفات فقط عند الحاجة.
Encapsulationالكود داخل Module لا يؤثر على كود خارجي.
Strict ModeModules تعمل دائمًا في الوضع الصارم (strict mode).

📌 مقارنة بين Named و Default Export:
الميزةNamed ExportDefault Export
عدد الصادراتأكثر من واحدواحد فقط
طريقة الاستيراد{ name }أي اسم
إمكانية تغيير الاسملا (إلا باستخدام as)نعم

🛠️ Advanced Features (متقدمة)
✅ إعادة التصدير (Re-export):
// mathUtils.js
export * from './math.js'; // يعيد تصدير كل شيء من math.js
JavaScript

✅ التصدير باسم جديد:

// math.js
export { add as sum };
JavaScript

✅ الاستيراد باسم جديد:

import { sum as addition } from './math.js';
JavaScript
🧪 استخدام Modules في Node.js

منذ Node.js v12+ يمكنك استخدام ES Modules مباشرة عن طريق:

  • تغيير الامتداد إلى .mjs، أو
  • إضافة "type": "module" في package.json.
🎓 خلاصة
المفهومالوصف
exportلتصدير متغيرات أو دوال من الملف
importلاستيراد محتوى من ملف آخر
default exportلتصدير عنصر واحد رئيسي
named exportلتصدير أكثر من عنصر